SqueakByExample:3.1

From 흡혈양파의 번역工房
Revision as of 07:17, 13 August 2012 by Onionmixer (talk | contribs) (SBE 문법적구성요소 페이지 추가)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

문법적 구성요소(Syntactic elements)

표현식들은 다음 건축 블록(building blocks)들로 구성됩니다 (i) 여섯개의 예비된 키워드 또는 가짜 변수들: self, super, nil, true, false, 와 thisContext (ii) 숫자, 문자, 문자열, 심볼(symbols) 그리고 배열(array)을 포함한 리터럴 오브젝트입니다(‘리터럴’-프로그램 언어에서 문자열 그 자체가 값을 나타내는 것. 예를 들면 X=‘90’에서 문자열 90은 90이라는 값을 나타내는 리터럴이다:역주)

우리는 표 3.1에서 다양한 구문적 구성요소의 예들을 볼 수 있습니다.

Syntax 의미하는것
startPoint 변수 이름
Transcript 글로벌 변수 이름
self 의사(가짜) 변수
1 십진법 정수
2r101 이진정수
1.5 부동 소수점 수
2.4e7 지수표기법(exponential notation)
$a 문자 ‘a’
'Hello' 문자열 ‘Hello’
#Hello 심볼 # Hello
#(1 2 3) 문자/리터럴 배열(a literal array)
{1. 2. 1+2} 동적 배열
"a comment" 주석
¦ x y ¦ 변수 x y의 공표
x := 1 1을 x에 할당
[ x + y ] x y로 평가되는 변수
<primitive: 1> 가상머신 프리미티브(primitive) 또는 어노테이션(annotation)
3 factorial 단항 메시지(unary message)
3+4 바이너리 메시지( binary message)
2 raisedTo: 6 modulo: 10 키워드 메시지
↑true 값을 true로 리턴
Transcript show: ’hello’. Transcript cr (.) 표현식 구별자(.) (expression separator)
Transcript show: ’hello’; cr 메시지 케스케이스 (;) (message cascade)
표 3.1: 간결한 스퀵 구문

로컬 변수

startPoint는 변수 이름 또는 식별자(identifier) 입니다. 관례적으로, 식별자(identifier)는 “캐멀케이스(camelCase)”로 쓰여진 단어들로 구성되어 있습니다. (예를 들면, 대문자로 시작하는 첫 번째 단어를 제외한 각 단어)

인스턴스 변수

메소드 또는 블록 인수(block argument) 또는 임시 변수의 첫 번째 글자는 반드시 소문자로 기록해야 합니다. 이 소문자는 독자에게 변수가 개별 범위(private scope)를 갖고 있음을 가리킵니다.

공유된 변수 (Shared variables)

대문자로 시작되는 식별자(Identifiers)는 글로벌 변수(global variables), 클래스 변수, 풀 딕셔너리(pool dictionary) 또는 클래스 이름입니다. transcript는 글로벌 변수, 클래스 TranscriptStream의 인스턴스 입니다.

수신자(The receiver)

self는 실행중인 현재 메소드 안에 있는 오브젝트와 관련이 있는 키워드입니다. 우리는 이 키워드를 “수신자”(receiver)로 부르겠습니다. 그 이유는 이 오브젝트는 보통 메소드를 실행하는 원인이 되는 메시지를 수진할 것이기 때문입니다. self는우리가 이 키워드에 할당을 할 수 없기 때문이 의사(가짜)변수-(pseudo-variable)로 불립니다.

정수

스퀵은 42와 같은 보통 10진수 정수 뿐만 아니라, 기수표기법(radix notation)을 제공합니다. 2r101은 기수2에서 101이며[예를 들면, 바이너리(binary)], 그것은 10진수 5와 동일합니다.

부동소수점수(Floating point numbers)

부동소수점수의 10진법 지수(base-ten exponent)로 지정될 수 있습니다: 2.4e7 is 2.4 × 107. 문자. 달러 기호는 리터럴 문자를 소개합니다: $a는 ‘a’를 위한 리터럴입니다. 비 프린팅 문자(non-printing)의 인스턴스는 적합한 이름으로 만든 Chracter space 와 Chracter tab과 같은 메시지를 Character class에 보냄으로써 얻을 수 있습니다.

문자열

작은 따옴표(Single quotes- 혹은 게발톱 따옴표)는 리터럴 문자열(literal string)입니다. 만약 여러분이 따옴표 안에 문자열을 원하신다면, 'Gday' 의 경우와 같이 따옴표를 두 개를 넣으면 됩니다.

심볼

심볼은 문자열과 같이, 연속된 문자를 포함합니다. 그럼에도 불구하고, 문자열과 달리, 리터럴 심볼(literal symbol)은 광범위한 고유성이 보장됩니다. 오직 한 개의 심볼 오브젝트 #Hello가 있지만, 값 ‘Hello’ 안에는 여러 개의 문자열 오브젝트가 있을 것입니다.

컴파일 시간 배열

컴파일 시간 배열은 공간-구별 리터럴(space-separated literals)로 둘러싸여 있는 #( )에 의해 정의됩니다. 괄호 내부의 모든 것은 반드시 컴파일 시간 상수이어야 합니다. 예를 들면 #( 27#(true false)abc)는 3개의 구성요소를 가진 리터럴 배열입니다: 정수 27은 두 개의 불리언과 심볼 #abc를 포함한 컴파일 시간 배열입니다.

런타임 배열

중괄호 { }는 런타임(run-time)에서 동적 (dynamic) 배열을 정의합니다. 구성요소들은 구두점으로 구분됩니다. 그러므로 {1.2. 1+2}는 구성요소 1, 2를 가진 배열을 정의하고 1+2를 평가한 결과입니다. (중괄호 기호는 스몰토크의 스퀵 언어에 고유한 것입니다. 다른 스몰토크에서는, 동적 배열을 명확하게 만들어야만 합니다.)

주석

주석은 큰 따옴표로 둘러싸입니다. "hello"는 주석이며(comment)이며, 문자열(string)이 아니고, 스퀵 컴파일러에 의해 무시됩니다. 주석은 아마도 다중 라인에 걸쳐 있을 수 있습니다.

로컬변수정의

수직 바들은 | | 메소드(또는 블록)안에 하나 또는 더 많은 지역 변수의 정의를 담습니다.

할당 (assignment)

:= 는 오브젝트를 변수에 할당합니다. 여러분은 때때로, ←이 사용된 것을 보게 될 것입니다. 안타깝게도, 이 기호가 ASCII 문자가 아니므로, 특별한 폰트를 사용하고 있지 않다면, 밑줄 표시로 나타날 것입니다. 그러므로 x:=1은 x1 또는 x_1과 같습니다. 여러분은 반드시 :=를 사용해야만 합니다. 그 이유는 다른 표현기호들은 스퀵 3.9 이후로 비추천(deprecated)되었기 때문입니다.

블록

대괄호 [ ]는 블록을 정의하며, 기능(function)을 나타내는 첫 번째 클래스 오브젝트인 블록 닫기 또는 낱말 닫기(lexical closure)로 알려져 있습니다. 우리가 살펴볼 내용처럼, 블록은 인수를 취하거나 로컬변수를 갖을 수 있습니다.

프리미티브(Primitive)

<primitive:…>는 가상 버신 프리미티브의 호출을 나타냅니다. (<primitive: 1>는 SmallInteger»+.)를 위한 VM 프리미티브 입니다. 이 프리미티브 다음에 오는 모든 모드는 이 프리미티브 실행이 실패할 경우에만 실행니다. 스퀵 3.9 이후로, 동일한 구문은 메소드 어노테이션을 위해 사용되었습니다.

단항 메시지

단항 메시지는 수신자(receiver, 3과 같은)에 보낸 한 개의 단어 (factorial과 같은)로 구성됩니다.

바이너리 메시지

바이너리 메시지는 수신자에 보낸 연산자(+와 같은)이며 단일 인수를 취합니다. 3+4에서 수신자는 3이며 인수는(argument) 4입니다.

키워드 메시지

키워드 메시지는 다중 키워드로 구성되어 있으며(raisedTo:modulo:와 같은), 각 끝부분은 콜론으로 되어 있으며, 단일 인수를 취합니다. 표현식 raisedTo: 6 modulo: 10에서, 메시지 선택자(selector) raisedTo:modulo:는 각각의 콜론 뒤에 오는 두 개의 인수 6과 10을 취합니다. 우리는 메시지를 수신자 2에 보냅니다.

메소드리턴

↑는 메소드로부터 값을 리턴하기 위해 사용됩니다. (여러분은 ↑ 문자를 얻기 위해 반드시 ^을 타이핑 해야 합니다.) 연속된 스테이트먼트(문장, 컴퓨터에선 보통 스테이트먼트라 불림:역주). 구두점 또는 마침표는 (.) 스테이트먼트 분리자(the statement separator)입니다. 두 개의 표현식 사이에 구두점을 넣으면, 독립된 스테이트먼트로 변경됩니다.

케스케이드

세미콜론은 단일 수신자에 메시지의 케스케이드를 보내기 위해 사용됩니다. Transcript show: 'hello'; cr에서 우리는 먼저 키워드 메시지 show: ‘hello’를 수신자 transcript(the receiver Transcript)에 보내고, 그 다음, 단항 메시지 cr를 동일한 수신자에 보냅니다.


클래스 번호(The classes Number), 문자(Character), 문자열(String) 그리고 불리언(Boolean)은 8장에서 상세하게 다룰 것입니다.

Notes