사용자: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'