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

배정문(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 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요