SqueakByExample:8.5: Difference between revisions
Onionmixer (talk | contribs) (SBE 불리언 페이지 추가) |
Onionmixer (talk | contribs) mNo edit summary |
||
Line 3: | Line 3: | ||
Boolean(불리언) 클래스는 스몰토크 언어가 클래스 라이브러리(the class library)에 얼마나 많이 영향을 미쳤는지에 관한 아주 매력적인 통찰을 제공합니다. 불리언은 Singleton 클래스 True와 False의 추상 수퍼 클래스(the abstract superclass)입니다. | Boolean(불리언) 클래스는 스몰토크 언어가 클래스 라이브러리(the class library)에 얼마나 많이 영향을 미쳤는지에 관한 아주 매력적인 통찰을 제공합니다. 불리언은 Singleton 클래스 True와 False의 추상 수퍼 클래스(the abstract superclass)입니다. | ||
불리언의 대부분의 동작은 | 불리언의 대부분의 동작은 메서드 ifTrue:ifFalse:를 고려함으로써 이해할 수 있으며, 이 메서드는 인수로서 두 개의 블록을 취합니다. | ||
<syntaxhighlight lang="smalltalk"> | <syntaxhighlight lang="smalltalk"> | ||
(4 factorial > 20) ifTrue: [ 'bigger' ] ifFalse: [ 'smaller' ] ⇒ 'bigger' | (4 factorial > 20) ifTrue: [ 'bigger' ] ifFalse: [ 'smaller' ] ⇒ 'bigger' | ||
Line 9: | Line 9: | ||
[[image:BooleanHierarchy.png|none|747px|thumb|그림 8.3: | [[image:BooleanHierarchy.png|none|747px|thumb|그림 8.3: 메서드가 불리언 속에서 추상적인(abstract)인 불리언 계층도 ]] | ||
Line 15: | Line 15: | ||
메서드 8.13: ifTrue:ifFalse:의 실행 | |||
<syntaxhighlight lang="smalltalk"> | <syntaxhighlight lang="smalltalk"> | ||
True»ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock | True»ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock | ||
Line 25: | Line 25: | ||
사실 이것은 OOP의 진수(정수)입니다: 메시지가 오브젝트에 발송될 때, 오브젝트 자체가 어떤 | 사실 이것은 OOP의 진수(정수)입니다: 메시지가 오브젝트에 발송될 때, 오브젝트 자체가 어떤 메서드가 응답을 위해 사용되야 할지를 결정합니다. 이번 경우, False의 인스턴스가 false alternative를 평가하는 반면에, True의 인스턴스는 단순히 true althernative를 평가합니다. 모든 추상 불리언 메서드는 True 또는 False를 위해 이러한 방식으로 실행됩니다. 예를 들어봅시다: | ||
메서드 8.14: negation 실행하기 | |||
<syntaxhighlight lang="smalltalk"> | <syntaxhighlight lang="smalltalk"> | ||
True»not | True»not | ||
Line 36: | Line 36: | ||
불리언은 ifTrue:, ifFalse:, ifFalse:ifTrue와 같은 유용하고 편리한 | 불리언은 ifTrue:, ifFalse:, ifFalse:ifTrue와 같은 유용하고 편리한 메서드들을 제공합니다. 여러분이 만약 열심(eager)과 게으름(lazy) 논리곱(conjunction)과, 논리합(disjunctions) 사이에서 선택을 할 수 있습니다. | ||
{| style="border: 1px solid black;" | {| style="border: 1px solid black;" |
Revision as of 05:11, 30 August 2012
불리언(Booleans)
Boolean(불리언) 클래스는 스몰토크 언어가 클래스 라이브러리(the class library)에 얼마나 많이 영향을 미쳤는지에 관한 아주 매력적인 통찰을 제공합니다. 불리언은 Singleton 클래스 True와 False의 추상 수퍼 클래스(the abstract superclass)입니다.
불리언의 대부분의 동작은 메서드 ifTrue:ifFalse:를 고려함으로써 이해할 수 있으며, 이 메서드는 인수로서 두 개의 블록을 취합니다.
(4 factorial > 20) ifTrue: [ 'bigger' ] ifFalse: [ 'smaller' ] ⇒ 'bigger'
이것의 concrete subclasses에서의 실행은 모두 사소한 것들입니다.
메서드 8.13: ifTrue:ifFalse:의 실행
True»ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
↑trueAlternativeBlock value
False»ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
↑falseAlternativeBlock value
사실 이것은 OOP의 진수(정수)입니다: 메시지가 오브젝트에 발송될 때, 오브젝트 자체가 어떤 메서드가 응답을 위해 사용되야 할지를 결정합니다. 이번 경우, False의 인스턴스가 false alternative를 평가하는 반면에, True의 인스턴스는 단순히 true althernative를 평가합니다. 모든 추상 불리언 메서드는 True 또는 False를 위해 이러한 방식으로 실행됩니다. 예를 들어봅시다:
메서드 8.14: negation 실행하기
True»not
"Negation----answer false since the receiver is true."
↑false
불리언은 ifTrue:, ifFalse:, ifFalse:ifTrue와 같은 유용하고 편리한 메서드들을 제공합니다. 여러분이 만약 열심(eager)과 게으름(lazy) 논리곱(conjunction)과, 논리합(disjunctions) 사이에서 선택을 할 수 있습니다.
(1>2) & (3<4) | ⇒ false | "must evaluate both sides" |
(1>2) and: [ 3<4 ] | ⇒ false | "only evaluate receiver" |
(1>2) and: [ (1/0) > 0 ] | ⇒ false | "argument block is never evaluated, so no exception" |
첫 번째, 예에서, 불리언 종속표현식(subexpressions)이 평가되었으며, 그 이유는 &가 불리언 인수(Boolean argument)를 취하기 때문입니다. 두 번째와 세 번째 예시에서 오직 첫 번째 예시만 평가되었고, 그 이유는 and:가 그 자체의 인수로서 블록(Block)을 기대하기 때문입니다 블록은 첫 번째 인수가 true일 경우에만 평가됩니다.
and:와 or:가 어떻게 평가되는지를 상상해 보십시오. Boolean에서 구현된 True와 False에서 실행(implementations)을 점검해 보십시오.