SqueakByExample:4.4: Difference between revisions
Onionmixer (talk | contribs) (스타일 수정) |
Onionmixer (talk | contribs) (번역수정) |
||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
==키워드 메시지를 식별하기 위한 힌트== | ==키워드 메시지를 식별하기 위한 힌트== | ||
종종, 초보자들은 언제 괄호를 넣어야 할지에 대한 | 종종, 초보자들은 언제 괄호를 넣어야 할지에 대한 이해하는데 어려움을 느낍니다. 이제, 컴파일러가 어떻게 키워드 메시지를 인식하는지 보겠습니다. | ||
===괄호를 넣을지에 대한 여부=== | ===괄호를 넣을지에 대한 여부=== | ||
Line 24: | Line 26: | ||
키워드 메시지는 문자 ., 또는 ;에 의해 잘라지지 않고 :에 의해 종료되는 단어들의 가장 긴 시퀀스입니다.<br> | 키워드 메시지는 문자 ., 또는 ;에 의해 잘라지지 않고 :에 의해 종료되는 단어들의 가장 긴 시퀀스입니다.<br> | ||
문자 [, ],과 콜론으로 몇몇 단어들이 둘러싸일 때,<br> | 문자 [, ],과 콜론으로 몇몇 단어들이 둘러싸일 때,<br> | ||
이러한 단어들은 정의된 영역에 로컬인 키워드 메시지에 함께하게 됩니다. (키워드 메시지가 됩니다:역주) | |||
}}</center> | }}</center> | ||
'''HINT.''' 만약 여러분이 이 | '''HINT.''' 만약 여러분이 이 우선순위 규칙에 어려움을 느낀다면, 동일한 우선순위를 가진 두 개의 메시지를 구별하기 원할 때마다 여러분 스스로 간단히 괄호를 넣어 시작할 수 있습니다. | ||
Line 39: | Line 41: | ||
다음 코드 조각은 괄호를 필요로 합니다. 그 이유는 메시지 includes: | 다음 코드 조각은 괄호를 필요로 합니다. 그 이유는 메시지 includes: 와 ifTrue: 둘 다 키워드 메시지이기 때문입니다. | ||
<syntaxhighlight lang="smalltalk"> | <syntaxhighlight lang="smalltalk"> | ||
Line 47: | Line 49: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
괄호 없는 알려지지 않은 메시지 includes:ifTrue:는 컬렉션에 | 괄호 없는 알려지지 않은 메시지 includes:ifTrue:는 컬렉션에 보낼 것입니다. | ||
===언제 [ ] 또는 ( )를 사용할까요?=== | ===언제 [ ] 또는 ( )를 사용할까요?=== | ||
여러분께서는 또한 괄호보다는 꺽쇠괄호를 사용할 때를 몰라 어려움을 겪고 계실 수 있습니다. 여러분이 [ ]를 사용해야 할 때를 아는 기본 원리는, 어쩌면 0번일 수도 있지만 얼마나 많이 표현식이 평가 되어야만 하는지를 모를 때 입니다. [ | 여러분께서는 또한 괄호보다는 꺽쇠괄호를 사용할 때를 몰라 어려움을 겪고 계실 수 있습니다. 여러분이 [ ]를 사용해야 할 때를 아는 기본 원리는, 어쩌면 0번일 수도 있지만 얼마나 많이 표현식이 평가 되어야만 하는지를 모를 때 입니다. [수식(expression)]은 문맥에 기초하여 몇 번이라도 처리할 수 있는(0번도 가능) 블록 구분자<sup>block closure</sup>를 만들 것입니다. (예, 오브젝트) 표현식은 메시지 보내기, 변수, 리터럴, 할당 또는 블록들 중 어떤 것도 될 수 있습니다. | ||
그러므로, ifTrue: 또는 ifTrue:ifFalse:의 | 그러므로, ifTrue: 또는 ifTrue:ifFalse:의 브랜치는 블록을 요구합니다. whileTrue: 메시지의 수신자와 인자 이 둘의 동일한 원리를 따르는 것들은 꺽쇠괄호 사용을 요구합니다. 그 이유는 우리가 수신자 또는 인수가 얼마나 많은 횟수만큼 평가되어야 하는지를 모르기 때문입니다. | ||
다시 말해, 괄호는 단지 메시지 발송 순서에만 영향을 미칩니다. 그러므로, 항상 정확히 한 번만 표현식을 처리할 것입니다. | |||
<syntaxhighlight lang="smalltalk"> | <syntaxhighlight lang="smalltalk"> | ||
[ x isReady ] whileTrue: [ y doSomething ] " | [ x isReady ] whileTrue: [ y doSomething ] "수신자와 인자는 반드시 블록이 되어야 합니다" | ||
4 timesRepeat: [ Beeper beep ] "인자는 한 번 이상 처리되므로, 블록이 되어야 합니다" | |||
4 timesRepeat: [ Beeper beep ] " | (x isReady) ifTrue: [ y doSomething ] "수신자는 한번만 처리되므로, 블록이 아닙니다" | ||
(x isReady) ifTrue: [ y doSomething ] " | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 13:06, 3 March 2013
키워드 메시지를 식별하기 위한 힌트
종종, 초보자들은 언제 괄호를 넣어야 할지에 대한 이해하는데 어려움을 느낍니다. 이제, 컴파일러가 어떻게 키워드 메시지를 인식하는지 보겠습니다.
괄호를 넣을지에 대한 여부
문자 [, ], 와 분명히 범위를 정한 영역. 이러한 영역 내에서, 키워드 메시지는 문자 ., 또는 ; 로 잘라지지 않는 :에 의해, 종료되는 단어들의 가장 긴 시퀀스입니다. 문자 [, ],과 콜론으로 몇몇 단어들이 둘러싸일 때, 이러한 단어들은 정의된 영역에 로컬인 키워드 메시지에 동참하게 됩니다.
이 예시에서, 두 개의 분명한 키워드 메시지가 있습니다. rotatedBy:magnify:smoothing: 과 at:put:. 입니다.
aDict
at: (rotatingForm
rotateBy: angle
magnify: 2
smoothing: 1)
put: 3
문자 [, ], 와 분명히 범위를 정한 영역. 이러한 영역 내부에서,
키워드 메시지는 문자 ., 또는 ;에 의해 잘라지지 않고 :에 의해 종료되는 단어들의 가장 긴 시퀀스입니다.
문자 [, ],과 콜론으로 몇몇 단어들이 둘러싸일 때,
이러한 단어들은 정의된 영역에 로컬인 키워드 메시지에 함께하게 됩니다. (키워드 메시지가 됩니다:역주)
HINT. 만약 여러분이 이 우선순위 규칙에 어려움을 느낀다면, 동일한 우선순위를 가진 두 개의 메시지를 구별하기 원할 때마다 여러분 스스로 간단히 괄호를 넣어 시작할 수 있습니다.
다음 코드 조각은 괄호를 필요로 하지 않습니다. 그 이유는 메시지 보내기 x isNil이 단항이므로, 키워드 메시지 ifTrue:보다 먼저 발송되기 때문입니다.
(x isNil)
ifTrue:[...]
다음 코드 조각은 괄호를 필요로 합니다. 그 이유는 메시지 includes: 와 ifTrue: 둘 다 키워드 메시지이기 때문입니다.
ord := OrderedCollection new.
(ord includes: $a)
ifTrue:[...]
괄호 없는 알려지지 않은 메시지 includes:ifTrue:는 컬렉션에 보낼 것입니다.
언제 [ ] 또는 ( )를 사용할까요?
여러분께서는 또한 괄호보다는 꺽쇠괄호를 사용할 때를 몰라 어려움을 겪고 계실 수 있습니다. 여러분이 [ ]를 사용해야 할 때를 아는 기본 원리는, 어쩌면 0번일 수도 있지만 얼마나 많이 표현식이 평가 되어야만 하는지를 모를 때 입니다. [수식(expression)]은 문맥에 기초하여 몇 번이라도 처리할 수 있는(0번도 가능) 블록 구분자block closure를 만들 것입니다. (예, 오브젝트) 표현식은 메시지 보내기, 변수, 리터럴, 할당 또는 블록들 중 어떤 것도 될 수 있습니다.
그러므로, ifTrue: 또는 ifTrue:ifFalse:의 브랜치는 블록을 요구합니다. whileTrue: 메시지의 수신자와 인자 이 둘의 동일한 원리를 따르는 것들은 꺽쇠괄호 사용을 요구합니다. 그 이유는 우리가 수신자 또는 인수가 얼마나 많은 횟수만큼 평가되어야 하는지를 모르기 때문입니다.
다시 말해, 괄호는 단지 메시지 발송 순서에만 영향을 미칩니다. 그러므로, 항상 정확히 한 번만 표현식을 처리할 것입니다.
[ x isReady ] whileTrue: [ y doSomething ] "수신자와 인자는 반드시 블록이 되어야 합니다"
4 timesRepeat: [ Beeper beep ] "인자는 한 번 이상 처리되므로, 블록이 되어야 합니다"
(x isReady) ifTrue: [ y doSomething ] "수신자는 한번만 처리되므로, 블록이 아닙니다"