2017년 1월 12일 목요일

Lua 입문 ( C언어 비교 ) (1)


들어가기에 앞서

Lua 를 알게된지 몇년은 된것 같은데, 제대로된 정리를 아직까지 못했는것 같습니다. 필요할때마다 구글링해가면서 쓰고는 또 까먹고 또 검색해 보고 구현하다 보면 실수하고 암튼 계속 검색을 하게 됩니다.
쉬운(?) C언어와 비교 예제를 제작해 알기쉽게 정리 하도록 하겠습니다.


Lua

Lua는 혼자 독립적으로 사용하는 언어라기보다는 다른 언어와 같이 사용하기 위한 언어입니다. 어떤 프로젝트에서 스크립트언어가 필요하다면 Lua스크립트를 사용할것을 추천합니다. C언어 연결도 굉장히 쉽게 되어있으며 LuaJ project도 진행되어 사용하기가 쉽습니다.
키워드도 몇개 되지 않지만 기존 언어들과 조금 차이가 있는 부분들이 있어서 사용시 주의가 필요한 부분도 있습니다.

내장 키워드
     and       break     do        else      elseif
     end       false     for       function  if
     in        local     nil       not       or
     repeat    return    then      true      until     while
연산자 및 토큰
     +     -     *     /     %     ^     #
     ==    ~=    <=    >=    <     >     =
     (     )     {     }     [     ]
     ;     :     ,     .     ..    ...

Lua 변수형 타입

Lua에서는 변수형 타입이 없습니다. 따라서 a=100 과 같이 값을 입력해주면 됩니다.
int a=100; (이런식으로 사용이 안됩니다.)

Lua 문장의 마지막 구분

C언어는 문장의 마지막을 ; 을 붙이도록 되어있습니다. Lua는 ; 을 사용해도 되고 안해도 됩니다. 대부분 사용하지 않습니다.

Lua nil

C언어의 NULL은 0값을 지닙니다. 물론 C언와의 다른 느낌이지만, 이 부분은 java언어의 null 생각하면 됩니다. Lua에서는 비슷하게 nil 이 존재한다. 물론 C언와의 다른 느낌이지만 instance를 해제 할 때 nil로 초기화 합니다.

Lua if문

if exp then block {elseif exp then block} [else block] end
여기에서 { } 사이 내용은 0-N회 반복될 수 있다는 의미이고 [ ] 사이의 내용은 0-1 존재가능 하다는 의미 입니다.
괄호 { } 는 lua에서는 then end 로 사용됩니다.
C
#include <stdio.h>

int main(void) {
    int var1 = 1;
    if( var1==1 ) {
        printf("var1 = 1");
    }
    return 0;
}
Lua
var1 = 1
if( var1==1 ) then
    print("var1 = 1")
end

Lua elseif

if가 연속으로 있으면서 다른 조건을 가질때 C언어는 else if를 사용합니다. Lua에서는 붙여서 elseif를 사용합니다.
C
#include <stdio.h>
int main(void) {
 int a = 2;
 if(a==1){
     printf("1\n");
 }else if(a==2){
     printf("2\n");
 }
 return 0;
}
Lua
a = 2;
if(a==1) then
    print("1");
elseif(a==2) then
    print("2");
end

Lua if내에서 여러개의 조건을 가질때

if안에 조건이 여러개 있을때 사용하는 방법이 C언어와는 조금 차이를 보입니다. 아래 예제를 보시기 바랍니다. 두가지 차이가 있는데요. C언어에서 &&, || 연산자가 없고 and,or이 사용됩니다. 또하나의 차이점은 괄호의 위치입니다. C언어에서는 if문 안에 전체적으로 ()괄호가 사용되지만 Lua에서는 논리연산인 and, or 을 중심으로 작은 괄호들로 묶이게 사용해야 하며, 전체적으로 괄호를 묶어서 사용할 수 없습니다. 아래 예제에서 if((a==1) and (b==2)) 이런식으로는 사용할 수 없습니다.
C
#include <stdio.h>
int main(void) {
 int a = 1;
 int b = 2;
 if( a==1 && b==2){
     printf("Hi\n");
 }
 return 0;
}

Lua
a = 1;
b = 2;
if(a==1) and (b==2) then
    print("Hi");
end

Lua if문 내에서 같지 않는 조건 (!=)

!=, ~= 두개가 다르다
C
a!=b
#include <stdio.h>
int main(void) {
 int a = 1;
 int b = 2;
 if(a!=b){
     printf("diff\n");
 }
 return 0;
}
Lua
a~=b
a=1
b=2
if(a~=b)then
    print("diff")
end


Lua for

C언어 보다는 for loop가 단순하고 할 수 있는 조건이 제한적입니다. 마치 basic 언어의 for문을 보는듯 합니다. for 뒤에 변수명과 3개의 숫자가 들어가는데 초기값 최종값 증가하는 값입니다. C언어처럼 여러개를 넣을 수는 없습니다. 아래 C++예제는 for문 안에 int i=0를 넣었습니다. 참고로 C++언어에서는 해당 시점에 변수를 생성할 수 있습니다.
Lua에서 사용되는 변수는 for문 안에서만 사용되는 지역변수가 됩니다. 따라서 for문내에서 i값을 쓰더라도 for문을 벗어나면 기존의 i값이 변경이 되지 않습니다. 아래 예를 참고 하시기 바랍니다.

C++
#include <stdio.h>
#include <iostream>
using namespace std;

int main() {
    int i=100;
    for(int i=0;i<=10;i+=5){
 printf("%d\n",i);
    }
    printf("end:%d\n",i);
    return 0;
}
Lua
i=100
for i=0,10,5 do
    print(i)
end
print("end:"..i)
결과
0
5
10
end:100

Lua 입문 ( C언어 비교 ) (2)
http://swlock.blogspot.com/2017/01/lua-c-2.html

댓글 없음:

댓글 쓰기