Bool — 참/거짓 판단을 위한 enum
Bool — 참/거짓 판단을 위한 enum
조건이 참인지 거짓인지는 프로그래밍의 기본이에요. Raku에서 그 판단을 담당하는 타입이 Bool이에요. 값은 False와 True 두 개뿐인 특별한 enum이죠.
enum Bool <False True>
본문
Bool은 불리언 참/거짓 결정을 위한 enum이에요. False가 0, True가 1에 해당해요. 아래 메서드들이 Bool의 특징적인 동작들을 보여줘요.
메서드
method ACCEPTS
method ACCEPTS(Bool:D: --> Bool:D)
스마트매치 비교에 쓰여요. 오른쪽이 True일 때는 항상 True를, 오른쪽이 False일 때는 항상 False를 돌려줘요. 특히 ACCEPTS는 항상 자신이 호출된 인스턴스, 즉 스마트매치의 오른쪽을 돌려줘요.
my $b = Bool.new( True );
# when True on the right side returns
# always True
True ~~ $b; # True
False ~~ $b; # True
$b = Bool.new( False );
# when False on the right side
# returns always False
False ~~ $b; # False
True ~~ $b; # False
routine succ
method succ(--> Bool:D)
True를 돌려줘요.
say True.succ; # OUTPUT: «True»
say False.succ; # OUTPUT: «True»
succ는 "successor"(후속자)의 줄임말로, 다음 enum 값을 돌려줘요. Bool은 False와 True 두 값만 가진 특별한 enum이에요. 정렬하면 False가 먼저 오므로, False의 후속자는 True예요. 그리고 True는 Bool enum의 "가장 높은" 값이므로 자기 자신의 후속자도 True예요.
routine pred
method pred(--> Bool:D)
False를 돌려줘요.
say True.pred; # OUTPUT: «False»
say False.pred; # OUTPUT: «False»
pred는 "predecessor"(선행자)의 줄임말로, 이전 enum 값을 돌려줘요. Bool은 특별한 enum이라 True의 선행자는 False, 그리고 False는 "가장 낮은" 값이므로 자기 자신의 선행자도 False예요.
routine enums
method enums(--> Hash:D)
enum-쌍의 Hash를 돌려줘요. Bool 타입뿐 아니라 어떤 키에서도 동작해요.
say Bool.enums; # OUTPUT: «{False => 0, True => 1}»
say False.enums; # OUTPUT: «{False => 0, True => 1}»
routine pick
multi method pick(Bool:U: --> Bool:D)
multi method pick(Bool:U: $count --> Seq:D)
True와/또는 False를 무작위로 골라 돌려줘요. 인자 없이 부르면 하나만 돌려주고:
say Bool.pick; # OUTPUT: «True»
$count가 1이면 하나만 담긴 Seq를 돌려줘요:
say Bool.pick(1); # OUTPUT: «(False)»
$count가 * 또는 2 이상이면 두 요소 — True 다음 False 또는 False 다음 True — 를 담은 Seq를 돌려줘요:
say Bool.pick(*); # OUTPUT: «(False True)»
routine roll
multi method roll(Bool:U --> Bool:D)
multi method roll(Bool:U $count --> Seq:D)
인자 없이 부르면 True 또는 False를 돌려줘요. 그 외에는 무작위로 고른 $count개 요소를 돌려줘요. enum에서의 각 무작위 선택은 동전을 독립적으로 던지는 것처럼 독립적으로 이뤄져요. $count로 *를 넘기면 무한한 Seq를 돌려줘요.
say Bool.roll; # OUTPUT: «True»
say Bool.roll(3); # OUTPUT: «(True False False)»
say Bool.roll(*); # OUTPUT: «(...)»
routine Int
multi method Int(Bool:D --> Int:D)
enum 쌍의 값 부분을 돌려줘요.
say False.Int; # OUTPUT: «0»
say True.Int; # OUTPUT: «1»
routine Numeric
multi method Numeric(Bool:D --> Int:D)
enum 쌍의 값 부분을 돌려줘요.
say False.Numeric; # OUTPUT: «0»
say True.Numeric; # OUTPUT: «1»
연산자
prefix ?
multi prefix:<?>(Mu --> Bool:D)
인자를 Bool로 강제해요.
prefix so
multi prefix:<so>(Mu --> Bool:D)
인자를 Bool로 강제하는데, prefix:<?>보다 우선순위가 느슨해요.