Types::Standard ã§å©ç¨ã§ãããç¥ã£ã¦ããã¨ä¾¿å©ãªå
æ¦è¦
Perlã§åãã§ãã¯ãè¡ãã¢ã¸ã¥ã¼ã«ã« Type::Tiny ã¨ãããã®ãããã¾ãã
Type::Tiny ã«ã¯ Types::Standard ã¨ããã©ã¤ãã©ãªãã¤ãã¦ãã¦ããããããªåãå©ç¨å¯è½ã«ãªãããã§ããã
ããã¯ãã® Types::Standard ã§å©ç¨å¯è½ãªãå人çã«ç¥ã£ã¦ããã¨ä¾¿å©ã ã£ããããããããã³ã¼ããããã¦ãããªã¼ã¨æãåãç´¹ä»ããè¨äºã§ãã
Enum[@list]
åæåã§ãã
å¼æ°ã¨ãã¦æ¸¡ããæååã®ãªã¹ãã®ãã¡ãããããã«ãããããå¤ã ãã許容ããåã§ãã
use Test2::V0; use Types::Standard qw( Enum ); my $constraint = Enum[qw( green blue red )]; ok $constraint->check('green'); ok !$constraint->check('hoge');
ï¼ããã¯ã»ã¨ãã©ã®äººãç¥ã£ã¦ããï¼
Maybe[T]
æªå®ç¾©å¤ãããã¯åãã©ã¡ã¼ã¿ï¼ã«ç¸å½ãããã®ï¼ã¨ãã¦æ¸¡ããåå¶ç´ãæºããå¤ãåãä»ããåã§ãã
use Test2::V0; use Types::Standard qw( Maybe Int ); my $constraint = Maybe[Int]; # æªå®ç¾©å¤ãæ´æ°ãåãä»ããåå¶ç´ ok $constraint->check(1); ok $constraint->check(undef); ok !$constraint->check([]);
ããã使ãã¨ä½ãå¬ãããã¨ããã¨ããã®åå¶ç´ã§ãã§ãã¯ããå¤ã¯nullableã§ããã¨ãããã¨ãæ示çã«ãªããã¨ã§ãã
ä¾ãã°ãå¼æ°ã¨ãã¦ã¦ã¼ã¶ã¼ã®IDã渡ããDBããã¦ã¼ã¶ã¼ã®ååãåå¾ãããããªã¡ã½ãããæ¸ãã¨ãã¾ãã
DBã«ã¯æå®ãããã¦ã¼ã¶ã¼IDã«å¯¾å¿ããã¦ã¼ã¶ã¼åããªãå ´åãããããã§ããã Function::Return 㨠Maybeå ã§è¿ãå¤ã®ãã§ãã¯ããããã¨ããã®ããã«æªå®ç¾©å¤ãæååãè¿ã£ã¦ããã¡ã½ããã§ããã¨ãããã¨ãæ示çã«ãªãã¾ãã
use Types::Standard qw( Maybe Int ); use Function::Return; sub get_user_name :Return(Maybe[Str]) { my ($self, $id) = @_; return $self->db->select(user => +{ id => $id }); }
Dict[ $key => $constraint, ... ]
åæãããå
¨ã¦ã®keyã¨å¯¾å¿ããvalueã®åå¶ç´ãæºããããã·ã¥ãªãã¡ã¬ã³ã¹ã®ã¿ãåãä»ããåãä½ããã¨ãã§ãããã®ã§ãã
ãã¹ãããããã¨ãå¯è½ã§ãã
ä¾ãã°ã idã¨ãããã¼ãIntåã®å¤ãæã¡ãnameã¨ãããã¼ãStråã®å¤ãæã¤ãããªããã·ã¥ãªãã¡ã¬ã³ã¹ã®ã¿ãåãä»ããåã¯ã以ä¸ã®ããã«ãã¦ä½ããã¨ãã§ãã¾ãã
use Test2::V0; use Types::Standard qw( Dict Int Str ); my $constraint = Dict[ id => Int, name => Str, ]; ok $constraint->check(+{ id => 0, name => 'anon', }); ok !$constraint->check(+{}); ok !$constraint->check(+{ status => 'success' });
ããã·ã¥ãªãã¡ã¬ã³ã¹ã§ä½ããã¦ãããã¼ã¿æ§é ãåã渡ããã¦ãããããªãµãã«ã¼ãã³ã¨ãã§ä½¿ãã¨ãã©ããªãã¼ã¿ãåã渡ãã¦ããã®ããæ示çã«ãªã£ã¦èªã¿ãããã³ã¼ãã«ãªãã¾ãã
TypeScriptã®ãªãã¸ã§ã¯ãåã¨ä¼¼ããããªãã®ã ã¨æãã¾ãã
Tuple[...]
ã¿ãã«ã§ãã
ã¡ããã¨èª¬æããã¨ãåæãããå
¨ã¦ã®åå¶ç´ãæºãããããªè¦ç´ ããã¤é
åãªãã¡ã¬ã³ã¹ã®ã¿ãåãä»ããåãä½ããã¨ãã§ãããã®ã§ãã
ãã¹ãããããã¨ãå¯è½ã§ãã
ä¾ãã°ã0, 1çªç®ãæ°å¤ã§ã2çªç®ãæååã§ããé åãªãã¡ã¬ã³ã¹ã®ã¿ãåãä»ããåã¯ã以ä¸ã®ããã«ãã¦ä½ããã¨ãã§ãã¾ãã
use Test2::V0; use Types::Standard qw( Tuple Num Str ); my $constraint = Tuple[Num, Num, Str]; ok $constraint->check([0.4, 10, 'hoge']); ok !$constraint->check([]); ok !$constraint->check(['foo', 'bar', []]);
é åºã¥ããããçµã§ãããã¨ãæ示çã«ã³ã¼ãã«æ¸ãããå ´åããæã£åãæ©ããã¼ã¿æ§é ãä½ãããæãªã©ã«ä¾¿å©ãªã®ã§ã¯ãªãã§ããããã
Optional[T]
Dict, Tuple ã¨ä¸ç·ã«ä½¿ãåã§ãçç¥å¯è½ãªè¦ç´ ãä½ãã¾ãã
ä¾ãã°å ã»ã©ã®Dictåã®nameããã¼ã¨ããçµãçç¥å¯è½ã«ãããå ´åã¯ã次ã®ããã«ãªãã¾ãã
use Test2::V0; use Types::Standard qw( Dict Optional Num Str ); my $dict = Dict[ id => Num, name => Optional[Str], ]; ok $dict->check({ id => 0, name => 'anon', }); ok $dict->check({ id => 0 });
Tupleåã®æå¾ã®è¦ç´ ãçç¥å¯è½ã«ãããå ´åã¯æ¬¡ã®ããã«ãªãã¾ãã
use Test2::V0; use Types::Standard qw( Tuple Optional Num Str ); my $tuple = Tuple[Num, Num, Optional[Str]]; ok $tuple->check([0.4, 10, 'hoge']); ok $tuple->check([0.4, 10]); ok !$tuple->check([]); ok !$tuple->check(['foo', 'bar', []]);
ï¼Optionalåç¬ã§ã使ãã¾ããããã®å ´åã®åä½ã¯æªå®ç¾©ã®ãããªã®ã§ä½¿ãã¹ãã§ã¯ããã¾ãããï¼
HasMethods[@methods]
å¼æ°ã¨ãã¦æ¸¡ãããå ¨ã¦ã®ã¡ã½ããããã¤ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã®ã¿åãä»ããåã§ãã
以ä¸ã®ã³ã¼ãã§ã¯ do_something ã¡ã½ããããã¤ã¤ã³ã¹ã¿ã³ã¹ã®ã¿ãåãä»ããåå¶ç´ãä½ã£ã¦ãã¾ãã
package Foo { sub new { my $class = shift; bless +{}, $class; } sub do_something {} } package Bar { sub new { my $class = shift; bless +{}, $class; } } use Test2::V0; use Types::Standard qw( HasMethods ); my $constraint = HasMethods['do_something']; ok $constraint->check(Foo->new); ok !$constraint->check(Bar->new);
duck typing ãå©ç¨ãã¦ã¡ã½ãããå¼ã³åºãã¦ããå ´æãããã¡ã½ããã®å¼æ°ã®ããªãã¼ã·ã§ã³ã«å©ç¨ãããªã©ããã¨ãã©ããªå¼æ°ã渡ãã°ããã®ããæ示çãªã³ã¼ããæ¸ãã¦ããã§ãã
use Type::Params qw( compile ); use Types::Standard qw( HasMethods ); sub hoge { state $check = compile(HasMethods['do_something']); my ($foo) = $check->(@_); $foo->do_something(); ... }
ã¡ãªã¿ã«ã Types::Util ã® duck_type é¢æ°ã§åçã®ãã¨ãã§ãã¾ãã
ã©ã¡ãã使ããã¯å¥½ã¿ã«ãªãã§ããããã»ã»ã»ã
ãããã«
ãããã®åãæ´»ç¨ãããã¨ã§ããããããããã³ã¼ããæ¸ããã¨æãã®ã§ãã²æ´»ç¨ãã¦ã¿ã¦ãã ããã
ãã¨ã Types::Standard ã«ã¯ä»ã«ãç¥ã£ã¦ããã¨ããã«ãªããããªåãããããããã®ã§ãæéãããã°ããç®ãéãã¦ããã¨ããããªã¨ãããã¾ãã
ä¾ãã°tieã¨ãoverloadããã使ã£ã¦ããã³ã¼ããããã®ãªããtieããã¦ããå¤ãoverloadããã¦ããå¤ããåãä»ããªãåã¿ãããªã®ãå©ç¨ã§ãã¾ãã