타입 개념을 사냥했으니, 이제 수식 개념을 요리하자. 변수를 어떻게 사용 할지는 수식으로 결정짓기 때문에, 반드시 요리해야 한다.

루아는

  1. 산술 연산자
  2. 관계 연산자
  3. 논리 연산자
  4. 문자열 병합 연산자
  5. 연산자 우선순위
  6. 테이블 생성자
를 가지고 있다.

산술연산자

 말그대로 산술연산을 지원하며, 추가적으로 나머지 연산자( % ) 연산자를 지원한다. 그리고 단항연산자로 '-' 연산자가 있다. 바로 부호를 바꾸어 주는 연산자이다. 나머지 연산자는 5.1 이상 부터 된다고 하니, 유념하자.

즉, + - * / % - 가 지원 된다.


관계 연산자

관계 연산자는 ture false 를 반환하는 연산자 이다. 지원 되는건 < > <= >= == ~= 인데, ~= 는 C 에서 처럼 != 과 동일 하다. 문자와 숫자에 대한 비교는 허용치 않는 다는 것을 기억하면 좋겠다


논리 연산자

두 변수를 파악하여, 파악 결과에 의해 둘 중 한 변수를 반환하는 연산자이다. 말로 하자면, A와 B가 다르면 A, 로 들 수 있겠다. 그렇다면 여기서 파악이란 무엇일까? 바로 변수가 true 인지 false 인지 파악하는 것이다. 이제 논리 연산자가 무엇인지 요리했다면다면, 어떤 논리연산자가 있는지 살펴 보자면, and, or, not 을 볼 수 있을 것이다.

  1. A and B :  A와 B가 true 라면 B, A나 B, 또는 A와 B 모두 false 라면, A 를 반환
  2. A or B : A나 B가 또는 A 와 B가 true 라면 B, A와 B가 false 라면, A를 반환
  3. not A : A가 false 라면 true, A가 true 라면 false
여기서 true false 평가는 값이 존재 하면 무조건 true, 값이 nil 이나 false 라면 false 로 평가 된다.


유용한 구문으로 A and B or C 구문이 있는데, A가 ture 라면 B 를 반환 A가 false 라면 C를 반환 해준다.


문자열 병합 연산자

.. 연산자 인데 개념은 php 의 . 과 동일하다,. 두개의 문자열을 병합해 준다. 즉 "ABC" .. "DEF" 를 "ABCDEF" 로 만들어 준다. 이때 주의 해야 할것은 숫자인데 숫자 0 .. 1 이라고 하면 "01" 이란 문자열이 된다. 숫자는 공백을 반드시 넣어 주어야 하는 주의사항이 따른다.


연산자 우선순위

.. 패스, 무조건 () 치는게 더 속편하다. C나 PHP 를 익히면서 느꼇다. 무조건 () 치는게 훨씬 좋다는 것을..


테이블 생성자

루아에는 테이블이라는 동적배열 개념이 존재 하는데, 이 테이블은 생성자에 의해서 초기화 될 수 있음을 보여 준다. 테이블 생성은 a = { } 로 할 수 있어서 a.x = 1 이 가능하다. 이럴 때 동적으로 변경되는 타입이 참 고맙다.

테이블의 생성자를 이용해 여러가지 이용이 가능하지만, 어떻게 사용 해야 하는지만 알아 본다면, 첫번째 변수에 대한 인덱스 키는 문자열이 아니라면 0 으로 주지 말 것을 권하고 있다. 왜냐하면 대부분의 라이브러리가 1번째 부터 읽기 때문이라고 한다 ..

이제 예를 들어 보자.

a = { x = 3, y = 4 }

에서 x는 "x" 이고 y는 "y" 로써 갖는다 즉, 문자열이다.

print( a[x] ) 는 nil 이지만 print( a["x"] ) 은 3이다.

테이블에는 테이블을 저장 할 수 있는데, 복잡해 지니, 생략한다.


관련링크

http://www.lua.org/pil/3.html


총평

지루한 이론 시간, nil 과 false 는 다른 타입이다. 하지만 논리연산에선 같은 변수로 취급한다는 것을 유념해야 할것 같다. .. 테이블에 테이블을 넣을 수 있다는 것만 알면 될 듯 싶다. 어차피 사용 하려 할 때 좀 더 생각해야 할테니 말이다. : )

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요