사용자:Jeebeen/루아 스크립트
if then else 구문
[+/-]팩토리얼을 계산하는 루아 스크립트 예제를 통해 if then else 구문에 대해 알아보자. 팩토리얼이란 경우의 수를 계산할 때 사용되는 개념으로, 순서를 구분하여 대상을 배열할 때 사용된다.
예를 들어 3명이 순서가 있는 3개의 의자에 순서대로 앉을 때 3명이 첫 번째 의자에 앉을 수 있는 경우의 수는 3이다. 그리고 나머지 두 명이 두 번째 의자에 앉는 경우의 수는 2이며, 나머지 한 명은 남은 의자에 무조건 앉아야 하므로 그 경우의 수는 1일일 것이다. 이렇게 3명이 3개의 의자에 순서대로 앉는 경우의 수는 3×2×1의 순서로 곱한 것과 같을 것이다. 순서 없이 뽑는 경우의 수는 조합이라고 한다. 예를 들자면 5명이서 의자에 앉을 3명의 사람을 구하는 문제일 것이다.
경우의 수를 배우지 않아도 루아 스크립트를 배우는 데에 지장을 있지는 않지만, 이해가 되지 않을 경우 경우의 수에 관한 짧은 단락을 참고할 수 있다. 경우의 수에 대한 이해를 도와줄 것이다.
function fact (n) -- function은 함수라는 뜻으로 함수 fact을 정의하는 부분이다.
if n == 0 then -- 등호(=) 는 하나로 쓰일 경우 값을 지정해준다는 뜻을 갖고 있다. == 를 사용해야 두 값이 같다는 뜻이 될 수 있다.
return 1
else
return n * fact (n-1) -- 이미 정의된 함수 fact를 if에서 n-1이 0이 될 때까지 더 사용하겠다는 뜻이다.
end
end
print("enter the value:") -- 값을 입력하시오
a = io.read("*n") --
print(fact(a))
여기서 함수 fact의 뜻은 팩토리얼이라는 뜻으로 작성자가 임의적으로 정할 수 있는 이름이다. 이 함수는 뒤에 곱셈기호인 *을 붙여주며 0이 될 경우 1을 곱해주며 끝이 난다. 1을 곱한 값은 자기 자신의 값과 같으므로 다시 fact 함수를 사용하지 않는 if 구문에서는 계산이 끝나게 된다. 이를 재귀성이라고 하는데, 자기 자신을 사용한다는 뜻이다. 만약 if에서도 fact 함수를 사용한다면 그 함수는 끝나지 않을 것이다. 이를 버그 혹은 오류라고 하며 이를 처리하는 과정을 예외 처리(exception)이라고 한다.
여기서 if else then이 사용된 구문을 수평적으로 나열할 경우에는 다음과 같은데, 루아는 다른 프로그래밍 언어와는 다르게 명시적으로 then과 end를 사용하여 문장의 연결과 끝을 정한다. 예를 들어 파이썬의 경우 따옴표나 ;을 사용하여 연결과 끝을 정한다. 이러한 루아의 특징은 검토를 용이하게 하기 위한 것임을 이에루잘림스키의 책 저자의 말에서 밝히고 있다.
if n == 0 then return 1; else return n * fact (n-1) end
물론 루아 스크립트에서도 세미클론을 이용하여 수평적으로 나열된 명령문을 시각적으로 구분할 수 있다. 줄 바꿈은 문법의 성립에 있어 영향이 없기 때문에 줄 바꿈을 통해 시각적으로 구분하는 것도 하나의 방법일 수 있다.
표현식
[+/-]만약 루아 인터프리터가 'expression is expected near ...' 라는 예외 처리 문구를 내보낸다면 표현식이 무엇인지에 대해 알아야 한다고 할 수 있겠다. 앞서 밝혔듯 =
가 프로그래밍에서 '지정해주다'라는 뜻을 가지고 있다는 걸 알 수 있다. 반면 우리는 이 기호를 경험적으로 양변의 값을 비교해주는 문구라고 생각한다. 비교 연산을 위해 사용하는 기호는 프로그래밍에서 ==
이다.