사용자:Jesusmas/루아 강의/2

논리와 제어 구조 편집

이 강에서는 논리에 관한 연산과, 비교 연산, 그리고 제어 구조를 다룹니다. 논리와 제어 구조는 밀접한 관련이 있는 만큼 함께 다루어 보겠습니다.

논리 연산자 편집

논리 연산자불 대수에 따라 참, 거짓을 판별하는 연산입니다. 루아에서 논리 연산자는 세 개 존재합니다.

  • 논리 부정 not
  • 논리곱 and
  • 논리합 or

세 연산자 모두 우리가 생각하는 그것과 큰 차이가 없습니다. 00000000000000

and와 or 편집

andor 연산자는 이항 연산자입니다. 이항 연산자는 두 값을 받아서 하나의 값을 돌려 줍니다. not 마찬가지로, 어느 형의 값이든 받을 수 있으며, 특이한 점은 두 값 중 하나를 돌려준다는 것입니다. and와 or 연산자의 키워드는 각각 andor입니다. and 연산은 첫째 항이 거짓이면 그 값을, 그렇지 않으면 둘째 항의 값을 돌려줍니다.

a = 3 and 2 --첫째 항 3이 참으로 판단되므로, 2를 돌려 줍니다.
b = false and 4 --첫째 항 false가 거짓으로 판단되므로, false를 돌려 줍니다.

루아의 and와 or 연산에서는 첫째 항을 돌려 주는 경우에는 둘째 항의 값을 계산하지 않습니다. 이러한 성질을 응용하면, 함수 호출을 할 필요가 없는 예외적인 경우를 체크할 수 있습니다.

x>0 and f(x) --[[x가 양수인 경우만 함수 f를 호출합니다. 그렇지 않은 경우에는 f를 호출하지 않습니다.]]

반대로 or 연산에서는 첫째 항이 참이면 그 값을, 그렇지 않으면 둘째 항의 값을 돌려줍니다.

a = 3 or 2 --첫째 항 3이 참으로 판단되므로, 3을 돌려 줍니다.
b = nil or 4 --첫째 항 nil이 거짓으로 판단되므로, 4를 돌려 줍니다.

이 성질을 응용하여 유용한 값이 배정되어 있지 않은 변수를 골라서 값을 배정할 수 있습니다.

a=3
a = a or 20 -- a에는 이미 3의 값을 담고 있으므로 그대로 3을 돌려 줍니다.

b=nil
b = b or 20  --[[b는 아무런 유용한 값을 담고 있지 않습니다.
        루아에서 nil은 거짓으로 판단되므로, 20을 돌려 줍니다.]]

and와 or 연산에서는 반드시 and가 우선순위를 가집니다. 이 점을 이용해서 아래와 같은 응용이 가능합니다. 왜 이렇게 되는지는 천천히 생각해 보시기 바랍니다.

rank = point >= 70 and 'Pass' or 'Fail'