SqueakByExample:3.1

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

문법 요소

문법은 다음의 구성 요소로 이루어져 있습니다. (i) 여섯개의 준비된 키워드 또는 의사 변수들: self, super, nil, true, false, 그리고 thisContext (ii) 숫자, 문자, 문자열, 심볼 그리고 배열을 포함하는 리터럴 객체[1]에 대한 상수 표현식 (iii) 변수 선언, (iv) 할당문, (v) 블록 클로저, (vi) 메시지 입니다.

Syntax 의미하는것
startPoint 변수 이름
Transcript 글로벌 변수 이름
self 의사(가짜)Psudo 변수
1 십진법 정수
2r101 이진정수
1.5 부동 소수점 수
2.4e7 지수 표기법
$a 문자 'a'
'Hello' 문자열 'Hello'
#Hello 심볼 # Hello
#(1 2 3) 문자/리터럴 배열
{1. 2. 1+2} 동적 배열
"a comment" 주석
¦ x y ¦ 변수 x y의 선언
x := 1 1을 x에 할당
[ x + y ] x y로 계산하는 변수
<primitive: 1> 가상머신의 프리미티브[2] 또는 어노테이션
3 factorial 단항 메시지
3+4 이항 메시지
2 raisedTo: 6 modulo: 10 키워드 메시지
↑ true 값을 true로 반환
Transcript show: 'hello'. Transcript cr (.) 선언문(표현식) 구분자(.)
Transcript show: 'hello'; cr 메시지 캐스케이드 (;)
표 3.1: 간단한 스퀵 문법

표 3.1에서 다양한 문법 요소의 예를 볼 수 있습니다.


지역 변수

startPoint는 변수 이름 또는 식별자 이름입니다. 관례상, 식별자는 "카멜케이스(camelCase)"로 단어를 구성합니다 (예를 들면, 각각의 단어는 처음 시작하는 단어를 제외하고 첫 글자를 대문자로 시작합니다). 인스턴스 변수, 메서드, 블록 인자, 임시 변수의 첫 번째 글자는 반드시 소문자여야 합니다. 이렇게 선언된 변수의 범위는 클래스 내에서 private으로 한정된다는것을 알아야 합니다.


공유 변수

대문자로 시작되는 식별자는 전역 변수, 클래스 변수, pool dictionary 또는 클래스 이름입니다. Transcript는 전역 변수이며, TranscriptStream클래스의 인스턴스 입니다.


수신자

self 는 실행 중인 현재 메서드 안에 있는 객체를 참조하는 키워드입니다.

이 객체는 보통 실행해야 할 메서드에서 발생한 메시지를 받으므로 이 키워드를 "수신자"라고 합니다. 우리가 self에 할당을 할 수 없으므로 의사 변수라고 합니다.


정수

스퀵은 42와 같은 보통 10진수 정수 뿐만 아니라, 기수 표기법도 제공합니다. 2r101은 2진수의 101이며[예를 들면, 바이너리], 10진수의 5와 동일합니다.


부동 소수점 수

10진 기반 지수와 함께 지정할 수 있습니다: 2.4e7 is 2.4 × 107.


문자

달러 기호는 리터럴 문자임을 의미합니다: $a는 'a' 에 대한 리터럴입니다. 비 출력 문자의 인스턴스는 적절한 이름으로 만든 Character space 와 Character tab과 같은 적절하게 이름 붙인 메시지를 보내어 Character 클래스에서 비출력 문자에 대한 인스턴스를 가져올 수 있습니다.


문자열

작은 따옴표(Single quotes- 혹은 게발톱 따옴표)는 리터럴 문자열을 정의할 때 사용합니다.문자열 안에서 따옴표를 사용하려면, 'Gday' 의 경우와 같이 따옴표를 두 개를 넣으면 됩니다.


심볼

문자의 연속 요소를 포함한다는 점에서 문자열과 비슷합니다. 그러나 문자열과 달리, 리터럴 심볼은 전체적으로 유일해야 합니다. Symbol 객체 #Hello 는 하나밖에 없지만, 값이 'Hello' 인 여러가지 다른 문자열 객체가 있을 수도 있습니다.


컴파일 시점 배열

컴파일 시간 배열은 #( )와 공백으로 구분한 리터럴로 둘러쌓아 정의합니다. 괄호 안의 모든 요소는 컴파일 시간 상수여야 합니다. 예를 들어, #( 27#(true false)abc)는 세가지 요소의 리터럴 배열입니다: 정수 27, 두 개의 Boolean 값을 지닌 컴파일 시간 배열, 그리고 심볼 #abc가 들어있습니다.


런타임 시점 배열

중괄호 { }는 실행 시간 동안 동적 배열을 정의합니다. 내부 요소는 구두점으로 구분한 프로그램식이 됩니다. 따라서 {1.2. 1+2}는 1, 2, 그리고 1+2를 처리한 결과 요소가 들어있는 배열을 정의합니다. (중괄호 기호는 스몰토크 스퀵환경의 독자적인 것입니다. 다른 스몰토크에서는 동적 배열을 확실히 만들어야 합니다.)


주석

주석은 큰 따옴표로 둘러싸여 있습니다. 문자열이 아니라 "hello"는 주석이며, 스퀵 컴파일러가 무시합니다. 주석은 여러 줄에 걸쳐 있을 수 있습니다.


지역 변수 정의

수직 바는 | | 메서드(그리고 블록 내에서도)의 하나 이상의 변수 선언을 둘러쌉니다.


할당

:= 는 객체를 변수에 할당합니다. 때로는, ←를 대신 사용하는 모습을 볼 수 있습니다. 안타깝게도, 이 기호가 ASCII 문자가 아니기 때문에, 특별한 글꼴을 쓰기 전에는 밑줄 문자 처럼 나타납니다. 따라서 x:=1은 x1, x_1 또는 x 밑줄 1과 같습니다. 스퀵 3.9 부터 다른 표현 방법을 낡음 처리(deprecated) 해놓았으므로 := 를 사용해야 합니다.


블록

각괄호 [ ]는 블록을 정의하며, 함수를 나타내는 첫 번째 Object 클래스인 블록 구분자block closure 또는 어휘 구분자lexical closure로 알려져 있습니다. 우리가 살펴볼 내용처럼, 블록은 인수를 취하거나 로컬변수를 가질 수 있습니다.


프리미티브

<primitive:…>는 가상 머신 프리미티브의 Call을 나타냅니다. (<primitive: 1>는 SmallInteger>>+.)를 위한 가상 머신 프리미티브를 가리킵니다. 이 프리미티브 다음의 코드는 프리미티브 처리에 실패했을 경우에만 실행합니다. 스퀵 3.9 부터는, 메서드 어노테이션에 동일한 문법을 사용합니다.

단항 메시지

(3과 같은) 수신자로 보내는 (factorial과 같은) 한 개의 단어로 구성됩니다.


바이너리 메시지

(+와 같이) 수신자로 보내며 단일 인자를 취하는 연산자입니다. 3+4에서 수신자는 3이며 인자는 4입니다.


키워드 메시지

(raisedTo:modulo:와 같은) 여러가지 키워드로 구성되어 있으며, 각각 콜론으로 끝나고, 단일 인자를 취합니다. raisedTo: 6 modulo: 10 이라는 프로그램식에서, 메시지 셀렉터 raisedTo:modulo:는 6과 10 두 개의 인자를 취하는데, 각각의 인자는 콜론 뒤에 붙어있습니다. 이 메시지를 수신자 2로 보냅니다.


메서드 반환

↑ 는 메서드에서 값을 반환할 때 사용합니다. ( ↑ 문자를 쓰려면 ^을 입력해야 합니다.)


선언문 순차 배치

마침표는 (.) 선언문 구분자입니다. 두개의 프로그램식 사이에 마침표를 넣으면, 독립된 선언문으로 바뀝니다.


종속

세미콜론은 종속된 여러 메시지를 단일 수신자에 보내는데 사용할 수 있습니다. Transcript show: 'hello'; cr에서 show: ‘hello’ 키워드 메시지를 수신자 Transcript에 먼저 보내고, 단항 메시지 cr를 동일한 수신자에 보냅니다.


Number, Character, String, Boolean 클래스는 8장에서 상세하게 다루겠습니다.


Notes

  1. literal - 프로그램 언어에서 문자열 그 자체가 값을 나타내는 것. 예를 들면 X='90' 에서 문자열 90은 90이라는 값을 나타내는 리터럴이다
  2. 이 경우 primitive는 squeak VM의 low-level 에 속하는 요소들의 고유명사로 사용됩니다. https://groups.google.com/forum/#!msg/fj.comp.oops/HXzNCQouoaQ/coURkVMiM2cJ 이 주소를 보면 보다 감을 잡기 편할 수 있습니다