SqueakByExample:3.3

From 흡혈양파의 번역工房
Jump to navigation Jump to search

메시지 보내기

스퀵에는 3가지 종류의 메시지가 있습니다.

  1. 단항 메세지는 인자를 취하지 않습니다. 1 factorial은 메시지 factorial 을 1 이라는 객체에 보냅니다.
  2. 이항 메시지는 정확히 하나의 인자를 취합니다. 1+2는 인자 2와 함께 메시지 + 를 1이라는 객체에 보냅니다.
  3. 키워드 메시지는 임시로 여러 개의 인자를 취합니다. 2 raisedTo:6 modulo: 10은 메시지 셀렉터 raisedTo:modulo:와 인자 6과 10으로 구성된 메시지를 2라는 객체에 보냅니다.


단항 메시지 셀렉터는 알파벳-숫자 문자로 구성되어 있으며, 소문자로 시작합니다.

이항 메시지 셀렉터는 다음 집합의 하나 이상의 문자로 이루어져 있습니다:

+ - / \ * _ < > = @ % | & ? ,


키워드 메시지 셀렉터는 소문자로 시작하며 콜론으로 끝나는 알파벳 숫자 키워드의 모음으로 구성되어 있습니다.

단항 메시지는 가장 높은 우선순위를 가지고 있으며, 그 다음 이항 메시지고, 마지막이 키워드 메시지 입니다. 따라서:

2 raisedTo: 1 + 3 factorial  128


(먼저 우리는 factorial을 3에 보내고, +6을 1로 보낸다음, raisedTo:7을 2에 보냅니다.[1]) 앞서 배운, 기호 expression ⇒ result 를 수식 계산 결과를 보여주기 위해 사용한다는 것을 상기해 주시기 바랍니다.

우선 순위에 따라, 처리는 엄격하게 왼쪽에서 오른쪽으로 진행합니다. 따라서 아래 계산식의 결과는

1 + 2 * 3  9

7이 아닙니다. 계산의 순서를 바꾸려면 괄호를 사용해야 합니다:[2]

1 + (2 * 3)  7


메시지 보내기는 마침표와 세미콜론으로 작성합니다. 마침표로 구분한 구문의 순차 배치는 선언문과 같이 개별로 나뉘어진 구문을 순차적으로 처리하도록 합니다.

Transcript cr.
Transcript show: 'hello world'.
Transcript cr

위의 코드는 cr 을 Transcript 객체로 보낸 후, show: 'hello world'에 보내고, 마지막으로 다른 cr을 보냅니다.

여러가지 메시지를 동일한 수신자로 보내고 있을 때, 일련의 과정들은 종속 구조와 같이 더욱 간결하게 표현될 수 있습니다. 수신자는 한 번 만 구체적으로 지정하며, 메시지들의 각 시퀀스는 세미콜론으로 구분합니다:

Transcript cr;
  show: 'hello world';
  cr

이것은 앞의 예제와 정확히 같은 결과를 냅니다.


Notes

  1. 해당되는 문장을 조금 더 자세히 분석한 내용은 http://ta.onionmixer.net/wordpress/?p=146 이곳을 참고하시면 됩니다.
  2. raisedTo: 같은 셀렉터의 경우는 연산자보다 우선순위가 뒤로 밀립니다. 일반적인 사칙연산셀렉터가 우선순위가 높은데 다른예의 factorial의 경우는 3이라는 객체에 대한 단항셀렉터이기때문에 객체 단위가 하나로 잡혀서 우선적으로 계산되는 결과가 나오는겁니다. 3 factorial은 3을 그대로 전달하는것같은 하나의 단위가 된다는 의미죠.