Bool — 참/거짓 판단을 위한 enum

Bool — 참/거짓 판단을 위한 enum

조건이 참인지 거짓인지는 프로그래밍의 기본이에요. Raku에서 그 판단을 담당하는 타입이 Bool이에요. 값은 FalseTrue 두 개뿐인 특별한 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 값을 돌려줘요. BoolFalseTrue 두 값만 가진 특별한 enum이에요. 정렬하면 False가 먼저 오므로, False의 후속자는 True예요. 그리고 TrueBool 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:<?>보다 우선순위가 느슨해요.

출처: Raku 공식 문서 — Bool