연산자의 종류 ------------------------------------------------------------------------------------------------

 

연산지는 두 개의 값들로 어떤 연산을 수행할 때 사용하는 특별한 기호이다. 산술 연산지들은 산술 결과를 낳으며

관계 연산자는 bool 결괴{true 또는 false)를 낳는다.

 

산술연산자의 종류 ------------------------------------------------------------------------------------------------

• 덧셈예 a + b c
• 뺑셈. 예 a - b = c
• 곱셈. 예 a • b c
• 나늦셈. 예 a / b = c

 

[역주 버전 5.0.x 에는 나머지 연산자가 없는데,버전 51 에서는 정수 형식이 추가될 것이며,

그에 따라 (정수 지원 여부와 상관없이 개발자가 실수로 빼먹 었다는 이야기도 있지만)

정수 나누기의 나머지를 계산하는 나머지 연산자도 추기될 것이다 나머지 연산자의 기호는 %가될 것이 거의 확실하다

 

관계연산자의 종류 ------------------------------------------------------------------------------------------------

관계 연산자는 두 값의 상대적인 관계를 판정하는 연산자이 다. 다음은 루아가 지원히는
표준적인 관계 연산자들을 보여주는 예이다.
if a b then 상등
print("a 는 b 와 같다. ")
end
if a b then 부등
print("a 는 b 와 같지 않다. " )
end
if a < b then 미만
print("a 는 b 보다 작다 . ")
end
if a > b then 초과
print("a 는 b 보다 크다 . ")
end
if a <= b then -- 01하
print( " a 는 b 보다 작거나 같다 " )
end
if a >= b then -- 01상
print("a 는 b 보다 크거나 같다 " )
end


관계 연산자로 테이블들을 비교할 때에는 주의를 기울여야 한다. 테이블이 배정된 변수는 테이블을 실제로 담고 있는 것이 아니라 단지 테이블을 가리키는 것일 뿐이다

(C 의 포인터나 C++ 의 참조 변수와 비슷하다)

따라서 테이블 변수들을 비교하는 것이 실제로 테이블의 내용이 같은지를 비교하는 것은 아니다 다음 예를 보자

 

tableA = {1. 2 , 3}
tableB = {1 , 2 , 3}


if tableA == tableB then
    print(" 두 테이블이 같음. ")
else
    print(" 두 테이블이 같지 않응. ")
end

 

두 변수가 각자 다른 태이블(내용은 같더라도)을 가리키고 있기 때문에 “두 테이블이 같지 않음”이 출력된다


tableA = {1 , 2 , 3}
tableB = tableA
if tableA == tableB then
    print(" 두 테이블이 같음. ")
else
    print(" 두 테이블이 같지 않음. ")
end


그러나 이 두 번째 예제는 tabelB 가 tableA 와 같은 테이블을 가리키는 것이므로 “두 테이블이 같음”을출력한다, 한편, 테이블 안의 값들은 일반적인 방식으로 비교할수 있다

if tableA[2] == tableB[2] then
    print(" 두 값이 같음 ")
end


첫 번째 예제 이후에 이것을실행한다고하더라도두값이 같다는출력이 나온다

 

8) [역주 이 책에서는 다루지 않지만, 메타테이블(metatable) 이라는 것을 이용하면 테이블 변수 자체를 비교할 때에도 개별요소들을 비교하는 식으로 두 태이블의 상등을 판정하게 만들수 있다 루아의 메타테이블은 C++ 의 연산자 중복적재 메커니즘과바슷한것이다.

 

논리 연산자의 종류 ------------------------------------------------------------------------------------------------

 


논리 연산자는주어진두인수(피연산자)들에 대해논리합, 논리곱같은논리 연산을수행한다.
루아에서 논리 연산자들은 모두 소문자로 이루어져 있다.
논리곱을 뜻하는 and 연산지는 첫 번째 인수가 false 이면 첫 번째 인수의 값을 몰려주고,
그렇지 않으면 두 번째 인수의 값을돌려준다.

 

a = 5
b = 10
c = 20

if (a < 10) and (b < 20) then
    print( " 두 번째 인수의 값인 true 를 돌려준다 . ")
end

if (a > c) and (b < 20) then
     Print (" 첫 번째 인수의 값인 false 를 돌려준다 . ")
end

 

논리합을뭇하는 or 연산자는 and 의 반대이다. or 은 첫 번째 인수가 false 가아니면 첫번째 인수를 돌려주고, 그렇지 않으면 두 번째 인수를 돌려준다.


a = 5
b = 10
c = 20
if (a < 10) or (b < 20) then
     print ( " 첫 번째 인수의 값인 true 를 톨려준다 . ")
end
if (a > c) or (b < 20) then
     print(" 두 번째 인수의 값인 true 를 돌려준다 . ")
end
if (a > c) or (b < 5) then
     print(" 두 번째 인수의 값인 false 를 돌려준다. ")
end

 

부정을 못하는 not 연산자는 앞의 두 연산자들과 달리 항상 부울 값, 즉 true 아니면 false 를돌려준다 루아에서 

논리 연산자들이 false로 간주하는값은 false 와 nil 뿐이다.

그 외의 모든 값은 true 로 간주한다. not 연산자는 주어진 인수의 부울 값을 부정한 결과를 돌려준다.

'게임개발공부 > LUA공부' 카테고리의 다른 글

테이블  (0) 2014.01.13
문자열 정리  (0) 2014.01.13
루아의 변수 선언과 규칙.  (0) 2014.01.13
루아스크립트 콘솔에서 실행하기  (0) 2014.01.13
루아에서 변수의 종류  (0) 2014.01.13
Posted by JJOREG