SqueakByExample:4.2
3 종류의 메시지
스몰토크는 발송된 메시지 위치의 순서를 결정하기 위한 몇 가지 단순한 규칙들을 정의합니다. 이러한 규칙들은 3 종류의 메시지 사이의 차이에 기초합니다:
- 단항 메시지는 어떤 정보도 갖고 있지 않은 오브젝트에 발송한 메시지입니다. 예를 들어 3 계승(factorial)에서, 계승은 단항 메시지 입니다.
- 이진 메시지는 연산자들(종종 산술적)로 구성되어 있습니다. 그 연산자들은 바이너리이며, 그 이유는 항상 두 개의 오브젝트에 관여하기 때문입니다: 수신자(receiver)와 인수 오브젝트(the argument object). 예를 들면, 10+20에서 +은 인수 20과 함께 수신자(receiver) 10에 발송된 이진 메시지 입니다.
- 키워드 메시지는 한 각각 콜론(:)으로 끝나며 한 개의 인수를 받는 한 개 또는 그 이상의 키워드로 구성됩니다. 예를 들면, anArray at: 1 put: 10 에서, 키워드 at:은 인수 1을 취하며, 키워드 put:은 인수 10을 취합니다.
단항 메시지
단항 메시지는 어떤 인수도 요구하지 않는 메시지 입니다. 단항메시지는 구문론적 템플릿(the syntactic template) receiver messageName을 따릅니다. 선택자(selector)는 단순히 포함하고 있지 않은 문자들의 연속(승계)으로 만들어 집니다. (예를 들면, 계승(factorial), 열기(open), 클래스(class)등)
89 sin | ⇒ 0.860069405812453 |
3 sqrt | ⇒ 1.732050807568877 |
Float pi | ⇒ 3.141592653589793 |
'blop' size | ⇒ 4 |
true not | ⇒ false |
Object class | ⇒ Object class "The class of Object is Object class (!)" |
이진 메시지(Binary messages)
이진 메시지는 정확히 하나의 인수를 요구하고 그것의 선택자(selector)가 : +, --, *,/, &, =, >, |, <, , 와 @ 와 같은 세트에서 가져온 하나 또는 그 이상의 문자의 연속으로 구성되어 있는 메시지입니다: -- 은 문장 분석(parsing) 양식에 허용되지 않습니다.
100@100 | ⇒ 100@100 "creates a Point object" |
3+4 | ⇒ 7 |
10 -- 1 | ⇒ 9 |
4 <= 3 | ⇒ false |
(4/3) * 3 = 4 | ⇒ true "equality is just a binary message, and Fractions are exact" |
(3/4) == (3/4) | ⇒ false "two equal Fractions are not the same object" |
키워드 메시지
키워드 메시지는 한 개 또는 그 이상의 인수와 각각 : 으로 끝나는 한 개 또는 그 이상의 키워드로 구성된 인수의 선택자(selector)를 요구하는 메시지 입니다. 키워드 메시지는 구문론적 탬플릿(the syntactic template)를 따릅니다: receiver selectorWordOne: argument-One wordTwo: argumentTwo
각각의 키워드는 인수를 취합니다. 그러므로 r:g:b:는 3 개의 인수를 가진 메소드이며, playFileNamed: 와 at: 은 1 개의 인수를 가진 메소드이며, at:put:는 2 개의 인수를 가진 메소드 입니다. 클래스 color의 인스턴스를 만들려면, 색상을 빨강으로 만드는 메소드 r:g:b: as in Color r: 1 g: 0 b: 0을 사용할 수 있습니다. 콜론 :은 선택자(selector)의 일부임에 유의합니다.
1 to: 10 → (1 to: 10) "creates an interval"
Color r: 1 g: 0 b: 0 → Color red "creates a new color"
12 between: 8 and: 15 → true
nums := Array newFrom: (1 to: 5).
nums at: 1 put: 6.
nums → #(6 2 3 4 5)
receiver selectorWordOne: argument-One wordTwo: argumentTwo