2008. 12. 3. 07:40 책 정리/Programming in Lua
사냥하고 요리했으면 먹는 일만 남았다. 문장 자체는 다른 언어와 비슷 하니 쉽게 설명 되어 진다. 문장으로는 배정문과 제어문, 프로시저 호출문이 있으며, 특이하게 다중 배정문과 지역변수 선언문이 있다.

배정문(assignment)

예제코드 : http://www.lua.org/pil/4.1.html

변수에 값을 배정하는 문을 뜻한다. 방법은 a = 1 처럼 사용 한다.

다중 배정문

a,b = 1,2 형태로 사용 된다. 일반적으로 이렇게 안쓰지만, 함수의 반환값이 두개 이상의 값을 반환 할 때 쓰곤 한다고 필자는 말하고 있다. 


여기서 잠깐,

배정문을 쓰지 않고 사용된 변수에는 기본적으로 nil값이 들어 가며, 다중 배정문시 a,b,c = 1,2 일 때 c 는 nil 값이 들어가고 a,b = 1,2,3 일 때 3은 무시 된다.


제어문

루아의 제어문으로는 반복문과 조건문으로 나뉘는데, 반복문은 while, repeat, for 이 있으며 조건문은 if 문이 있다. 각 사용 법은 예제로 대체 한다.


if문

예제 코드 : http://www.lua.org/pil/4.3.1.html

if 다음에 then 은 필수 이며 then 다음에 end는 필수이다. 하지만 else는 선택이다. then 다음에 else 나 elseif문도 제공해 주기 때문에 쉽게 파악 할 수 있다. 마찬가지로 elseif 다음에 end는 필수로 와야 한다.


while 문

예제코드 : http://www.lua.org/pil/4.3.2.html

C와 마찬가지로 while 조건이 참이면 수행 아니면 종료 이다. while 다음에 do 가 꼭 와야 하며 그 뒤에 end 는 꼭 와야 한다. { ~ }  를 do ~ end 로 하는 것과 같다.


repeat 문

예제코드 : http://www.lua.org/pil/4.3.3.html

C의 do while 과 같으며, 구문은 repeat ~ until 이고, until 다음에 조건문이 이루어져 참이면 다시 repaet 한다.


for 문( 수치형 평가 )

예제코드 : http://www.lua.org/pil/4.3.4.html

수치 조건으로 수행하는데 while의 특수화로 봐도 무리 없다. for var=exp1, exp2, exp3 do <코드뭉치> end 로 표현 가능하며 C의 for( int i = 0; i < 3; ++ i ) 와 비교 했을 때 exp1 은 int i = 0 이고, exp2 는 i < 3 그리고 exp3 는 i를 1씩 증가와 동일하다. 유념해야 할 사실은 exp1 의 값이 exp2 의 값까지 exp3를 이용하여 루프를 돈다. 역시 뒤에 do 붙이고 코드뭉치 쓰고 end 로 닫아 줘야 한다.


for 문( 반복자 함수형 )

예제코드 : http://www.lua.org/pil/4.3.5.html

여기서 반복자란 테이블의 index를 뜻한다. 아래 코드처럼

for i,v in ipairs(a) do print(v) end

ipairs(a) 를 이용하여 a의 index와 value를 i,v 에 다중 배정하여, i : index 와 v : value 를 받아 printf(v) 를 호출하면서 i 가 a 테이블의 의 끝일때까지 반복한다. for 역시 do ~ end 가 필수이다.


break 문과 return 문

예제코드 : http://www.lua.org/pil/4.4.html

break 문은 반복문의 탈출문이며 return 문은 함수의 탈출문이다. break은 그냥 빠저나가지만 return 은 값을 리턴할 때나 탈출할 때도 사용 되는 점이 다르다. 유념해야할 사항으로는 return 이나 break 은 반드시 end의 앞에 놓아야 한다. 예제코드에서 반복문의 중간이나 함수의 중간에서 리턴되는 부분을 유심히 보면 쉽게 이해 할 수 있을 것이다.


블록과 지역 변수

예제코드 : http://www.lua.org/pil/4.2.html

블록은 do ~ end 가 블록이며 then ~ end 를 블록구역 이라 한다. C에선 이러한 블록 구역에 변수가 들어 있다면 지역 변수이지만, 루아에선 명시적으로 지역이라고 명명해야 한다. 명명 방법은 키워드 "local" 을 붙여 주면 된다. 필자는 이런 local 은 불록내에서 접근하는 속도가 전역변수보다 훨씬 빠르기 때문에, 틈만 나면 사용해주는게 좋다고 말한다.

지연 변수는 블럭 외부에서 참조가 되지 않기 때문에, 이 점을 알아 두어야 한다. 참고로 루아에선 모든 변수는 전역이다.


총평

책이 참 잘 나와 있다. 쉽게 쉽게 이해가 되니, 술술 넘기자.


posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요