SqueakByExample:4.2
세 종류의 메시지
스몰토크는 메시지가 전송되는 순서를 결정하기 위해 메시지를 몇가지 간단한 규칙으로 정의합니다. 이러한 규칙들은 세 종류의 메시지구분에 대한 차이를 기반으로 합니다:
- 단항 메시지는 어떤 정보도 갖고 있지 않은 객체에게 발송한 메시지입니다. 예를 들어 3 factorial에서, factorial은 단항 메시지 입니다.
- 이항 메시지는 연산자들(종종 산술적)로 구성되어 있습니다. 그 연산자들은 이항(양쪽에 인자가 필요한)이며, 그 이유는 이항메세지는 항상 두 개의 객체, 그리고 수신자와 인자 객체등에 관여하기 때문입니다. 예를 들면, 10 + 20 에서 +는 인자 20과 함께 수신자 10에 발송된 이항 메시지 입니다.
- 키워드 메시지는 한 각각 콜론(:)으로 끝나며 한 개의 인자를 받는 한 개 또는 그 이상의 키워드로 구성됩니다. 예를 들면, anArray at: 1 put: 10 에서, 키워드 at:은 인자 1을 취하며, 키워드 put:은 인자 10을 취합니다.
단항 메시지
단항 메시지는 어떤 인자도 요구하지 않는 메시지 입니다. 단항 메시지는 receiver messageName 의 문법구조를 따릅니다. 이런경우에 셀렉터는 그 뒤에 문자(인자)가 이어지지 않게 만들어져 있습니다. (예를 들면, 계승(factorial), 열기(open), 클래스(class)등)
89 sin | ⇒ 0.860069405812453 |
3 sqrt | ⇒ 1.732050807568877 |
Float pi | ⇒ 3.141592653589793 |
'blop' size | ⇒ 4 |
true not | ⇒ false |
Object class | ⇒ Object 클래스 "Object의 클래스가 Object 클래스입니다 (!)" |
이항 메시지
이항 메시지는 정확히 하나의 인자를 필요로 하고 메세지의 선택자가 : +, --, *,/, &, =, >, |, <, , 그리고 @ 등과 같은 분류에서 가져온 하나 이상의 문자가 붙어오도록 만들어져 있는 메시지입니다: -- 은 문장의 해석양식에서 허용되지 않습니다.
100@100 | ⇒ 100@100 "creates a Point object" |
3+4 | ⇒ 7 |
10 -- 1 | ⇒ 9 |
4 <= 3 | ⇒ false |
(4/3) * 3 = 4 | ⇒ true "등식은 이항 메시지이며 분수 표현은 정확합니다" |
(3/4) == (3/4) | ⇒ false "두개의 동일한 분수는 같은 객체가 아닙니다" |
키워드 메시지
키워드 메세지는 각각 콜론으로 끝나는 셀렉터와 그에 따르는 한개 또는 복수의 인자로 구성된 메세지입니다. 키워드 메시지는 다음의 문법구조로 되어있습니다: receiver selectorWordOne: argument-One wordTwo: argumentTwo
키워드는 따로따로 인자를 취합니다. 그러므로 r:g:b:는 3 개의 인자를 가진 메서드이며, playFileNamed: 와 at: 은 1개씩의 인자를 가진 메서드고, at:put:는 2 개의 인자를 가진 메서드 입니다. color 클래스로 인스턴스를 만들면, Color r:1 g:0 b:0 에서와 같이 색상을 빨강으로 만드는 메서드 r:g:b: 을 사용할 수 있습니다. :(콜론) 은 셀렉터의 일부임을 주의합니다.
1 to: 10 ⇒ (1 to: 10) "인터벌을 만듭니다"
Color r: 1 g: 0 b: 0 ⇒ Color red "새 색상을 만듭니다"
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