SqueakByExample:3.1: Difference between revisions
Onionmixer (talk | contribs) (번역수정) |
Onionmixer (talk | contribs) (오타수정) |
||
Line 76: | Line 76: | ||
self는 실행 중인 현재 메서드 안에 있는 오브젝트를 참조하는 키워드입니다. | self는 실행 중인 현재 메서드 안에 있는 오브젝트를 참조하는 키워드입니다. | ||
이 오브젝트가 보통 실행해야 할 메서드에서 발생한 메시지를 받으므로 이 키워드를 | 이 오브젝트가 보통 실행해야 할 메서드에서 발생한 메시지를 받으므로 이 키워드를 "수신자"라고 합니다. 우리가 '''self'''에 할당을 할 수 없으므로 의사 변수라고 합니다. | ||
Revision as of 09:37, 20 February 2013
문법 요소
문법은 다음의 구성 요소로 이루어져 있습니다. (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)"로 단어를 구성합니다 (예를 들면, 각각의 단어는 처음 시작하는 단어를 제외하고 첫 글자를 대문자로 시작합니다). 인스턴스 변수, 메서드, 블록 인자, 임시 변수의 첫 번째 글자는 반드시 소문자여야 합니다. 는 변수가 전용 범위를 가지고 있음을 독자에게 보여줍니다.
공유 변수
대문자로 시작되는 식별자는 전역 변수, 클래스 변수, pool 딕셔너리 또는 클래스 이름입니다. 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' 의 경우와 같이 따옴표를 두 개를 넣으면 됩니다.
심볼
문자의 연속 요소를 포함한다는 점에서 문자열과 비슷합니다. 그러나 문자열과 달리, 리터럴 심볼은 전체적으로 유일해야 합니다. 심볼 오브젝트 #Hello는 하나밖에 없지만, 값이 'Hello' 인 여러가지 문자열 오브젝트가 있을 수도 있습니다.
컴파일 시점 배열
컴파일 시간 배열은 #( )와 공백으로 구분한 리터럴로 둘러쌓아 정의합니다. 괄호 안의 모든 요소는 컴파일 시간 상수여야 합니다. 예를 들어, #( 27#(true false)abc)는 세가지 요소의 리터럴 배열입니다: 정수 27, 두 개의 불리언 값을 지닌 컴파일 시간 배열, 그리고 심볼 #abc가 들어있습니다.
런타임 시점 배열
중괄호 { }는 실행 시간 동안 동적 배열을 정의합니다. 요소는 구두점으로 구분한 구문입니다. 따라서 {1.2. 1+2}는 1, 2, 그리고 1+2를 처리한 결과 요소가 들어있는 배열을 정의합니다. (중괄호 기호는 스몰토크 스퀵환경의 독자적인 것입니다. 다른 스몰토크에서는 동적 배열을 확실히 만들어야 합니다.)
주석
주석은 큰 따옴표로 둘러싸여 있습니다. 문자열이 아니라 "hello"는 주석이며, 스퀵 컴파일러가 무시합니다. 주석은 여러 줄에 걸쳐 있을 수 있습니다.
지역 변수 정의
수직 바는 | | 메서드(그리고 블록 내에서도)의 하나 이상의 변수 선언을 둘러쌉니다.
할당
:= 는 오브젝트를 변수에 할당합니다. 때로는, ←를 대신 사용하는 모습을 볼 수 있습니다. 안타깝게도, 이 기호가 ASCII 문자가 아니기 때문에, 특별한 글꼴을 쓰기 전에는 밑줄 문자 처럼 나타납니다. 따라서 x:=1은 x1, x_1 또는 x 밑줄 1과 같습니다. 스퀵 3.9 부터 다른 표현 방법을 낡음 처리(deprecated) 해놓았으므로 := 를 사용해야 합니다.
블록
각괄호 [ ]는 블록을 정의하며, 함수를 나타내는 첫 번째 클래스 오브젝트인 블록 구분자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
- ↑ literal - 프로그램 언어에서 문자열 그 자체가 값을 나타내는 것. 예를 들면 X='90' 에서 문자열 90은 90이라는 값을 나타내는 리터럴이다
- ↑ 이 경우 primitive는 squeak VM의 low-level 에 속하는 요소들의 고유명사로 사용됩니다. https://groups.google.com/forum/#!msg/fj.comp.oops/HXzNCQouoaQ/coURkVMiM2cJ 이 주소를 보면 보다 감을 잡기 편할 수 있습니다