LUA[강좌] C,C++ 을 아는사람을 위한. 루아의 시작.. | | |
"루아를 이용한 민첩하고 효과적인 게임 개발" - 류광 역 - 서적을 통해 학습한 내용을 복습 및 지식공유를 위해 작성합니다.
루아는 포르투갈어로 을 뜻한다.
스크립트에 대한 정의라던지 약관을 늘여놓은듯한 글은 생략한다...
1.루아 콘솔 프로그램
-첨부파일에 루아 콘솔 프로그램이 있다. (LuaConsole.exe)
- 간단한 코드 및 한줄로 실험해 볼만한것이라면 콘솔을 이용하면 된다.
sample code1
for indx=1,4 do print("line: ", indx) end
sample code2
for indx=1,4 do
print("line: ", indx)
end
청크(chunk)란!? : 루아에서는 하나의 명령 또는 일련의 명령들(스크립트 파일 전체 등)을 칭함.
잘 모르겠지만.. 청크라는 용어를 앞으로 많이 쓰일 모양입니다.
2. 주석처리..
- c 에서는 // , /* */ 두가지 방법을 사용하지요..
- 루아에서는 -- , --[[ --]] 두가지 방법을 사용합니다.
--[[ --]] 이녀석들... 마음에 안드는군요 -_-; --[[ ]]-- 이게 좀 더 그럴싸 했을텐데..
=> 류광님께서 글을 쓰셨더군요 ^^
제가 말한 --[[ ]]-- 이게 좀 더 그럴싸 했을텐데.. 라는 표현은,
대칭된 모습이 이쁘지 않을까? 라는 조크인데 오해를 샀네요 ㅎㅎ
08.10.8 - 문득 생각나서 적어봄..
3. lua 파일을 만들어 실행해보자!!
helloworld.lua 파일 작성
-- disc : hello world
myString = "Hello World"
print(myString)
※메모장으로 하면 안된다는 말을 얼핏 줏어들은것 같습니다.
울트라에디터, vc, 에디터플러스 등으로 하면 될겁니다.
![](http://cafefiles.naver.net/data15/2006/1/12/68/helloworld_console_run.gif)
4. 자료형
- 루아는.. 플래시의 스크립트와 비슷하다. 정해놓고 쓰는 자료형이 없다.
즉, int iNum = 3; 이 아닌 iNum = 3 이라 하면 된다..
그렇지만, iNum = "삼이다" 이와같이 자료형 자체가 변할 수 있다..
- nil, bool, 문자열, 수치, 테이블 이와 같은 종류가 존재한다.
- type() 함수를 통하여 그래도 정체를 좀 알 수 있다니.. 다행이군요..
5. nil 과 local
- nil 과 local 이라는 특이한 녀석들이 있다..
- nil : 일종의 null 이라 생각하면 간단할것 같다..
Value = nil -- 변수를 삭제한다!? 삭제란 존재 자체가 지워지는가에 대해서는 잘 모르겠다..
- local : 지역 변수를 선언할때 사용
우선 루아는 기본적으로 모두 전역변수이다.
지역변수로 사용하기 위해서는 local 을 사용해야 한다
sample code 1
function Sample()
myDat_1 -- 전역변수가 된다..
local myDat_2 -- Sample 함수가 끝날때 소멸된다
end
sample code 2 ( 아래 for 문에 자세한 원리를 설명한다 )
function Sample(recvDat) -- recvDat 는 자동으로 지역변수가 된다. local 을 붙여줄 경우 오히려 에러를 낸다.
for local i = 1, 10 do-- 오류 for 문에 쓰이는 변수는 자동으로 지역변수가 된답니다... 일관성이 조금 부족하군요
end
6. 테이블
- ex) myTable = { 1, 2, 3, 4, 5 } myTable[1] 은 1입니다... c 의 배열과는 종이 한장 차이군요
myTable[6] = 6 이와 같이 컨테이너의가변 성향을 갖고 있군요
- 테이블은 일종의 포인터이다. 진짜 정체를 가르키는 포인터라 생각하면 된다.
그러므로 테이블간의 비교연산 등을 할 수 없다.
sample code)
tableA = [1, 2, 3]
tableB = [1, 2, 3]
if tableA == tableB then
print( " 같다 " )
else
print( " 틀리다 " )
eld
결과는 '틀리다'tableA 와 tableB 가 갖는 포인터는 다르기 때문이다.
- 배열을 사용하는 방식처럼 for 문 등을 돌려 비교해야 하는가 봅니다
7. 논리 연산자
- 일반적으로 우린 && || 두가지를 사용 하곤 하지요
- 그 뜻 또한 잘 아시다시피 그리고 와 또는 입니다.
- 책에서는 괜히 복잡하게 설명했다 생각되는군요.. 바로 예제 들어갑니다.
--------------------------------------------------------------------------------
sample code1
a = 5
b = 10
c = 20
if ( a < 10 ) and ( b < 20 ) then
print ( "true" ) ;
else
print ( "false" ) ;
end
위의 코드는 결과적으로 true 입니다.
c 코드로 표현을 해볼까요~
if ( a < 10 && b < 20 )
{
// .....
}
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
sample code2
if ( a < 10 )or ( b <1 ) then
print ( "true" ) ;
else
print ( "false" ) ;
end
위의 코드에서 a < 10 는 참입니다. 그렇지만 b < 1 은 거짓입니다. 결과는 true 입니다.
우리가 알다시피 or 연산자로 인해 1 0 = 1 이 되는군요~
c 코드로 표현을 해볼까요~
if ( a < 10 || b <1 )
{
// .....
}
--------------------------------------------------------------------------------
- not 연산자
이것 역시 책에서는 알송달송한 설명이다... 바로 c 코드로 확인해 보자.
if ( 0 ) // 이것은 0 이므로 if 문 안에 들어가지 않을것이다..
{
}
if ( 100 ) //if 문의 동작 원리는 아시다시피 0 이 아니면 들어가는 것이다.
{
}
그렇다면 not 은 무엇인가!?
if ( ! 100 )// 0은 1로 변하게 되고 0 이 아닌것은 0 이 되버린다... 그러므로 ! 100 은 0 이 된다.
{
}
c 코드에서의 자주 쓰이는 방법이다.
#define FALSE 0
#define TRUE 1
static bool bFlg= FALSE ;
bFlg != bFlg ; // 결과는 FALSE -> TRUE 가 된다.
bFlg != bFlg ; // 결과는 TRUE-> FALSE가 된다.
bFlg != bFlg ; // 결과는 FALSE -> TRUE 가 된다.
bFlg != bFlg ; // 결과는 TRUE-> FALSE가 된다.
if ( bFlg ) // bFlg 가 0 이 아니라면 if 문 속으로 들어갈 것이다.
{
// .......
}
if ( ! bFlg ) // bFlg 가 0 과 같다면 if 문 속으로 들어갈 것이다. 이것은 if ( bFlg == 0 ) 과도 같은 식이다.
{
// .......
}
결과적으로 not 연산자는 c 에서 ! 와 같은 원리이다.
간단한걸 너무 어렵게 설명했나요? ㅜ_ㅜ
이것으로 논리 연산자 라는 녀석을 마칩니다.
8. while 문과 repeat 문
- while : 루아에서의 while 문은 c 와 사용법이 동일하다. 좀 더 구체적인 설명은 while 문으로 검색하여 c 에서의 사용법을 참조.
sample code
indx = 1
while indx < 10
do
print ( " loop pass: ", indx )
indx = indx + 1
end
- repeat : 루아에서의 repeat 는 do while 문과 같은 원리이다. 일단 한번은 하고 보자는 식이다 :)
sample code
indx = 1
repeat
print ( " loop pass: ", indx )
indx = indx + 1
until indx > 10
- 결론 : while 문은 do 와 end 로 이뤄지며 repeat 는 repeat 와 until 이 사용된다.
9. 우리의 호프 for 문
- 무슨 말이 필요하랴 샘플 코드로 바로 들어갑니다.
sample code1
for indx = 1, 10
do
print ( indx )
end
c code
for ( int indx = 1 ; i <= 10 ;i += 1)
{
printf ( indx ) ;
}
첫 예제에 보면 indx = 1, 10 이라 되있다. 1 부터 10 까지 인데 증가치는 얼마인지 보이질 않는다.
일종의 증가치를 생략한 경우인데 기본값 1 이 증가된다. 이것 역시 일관성이 부족하다...
sample code2
for indx = 10, 1,-1
do
print ( indx )
end
c code
for ( int i = 10 ; i >= 1 ; -- i )
{
printf( indx ) ;
}
for loop = 0 , 100 , 1
do
-- ...............
end
loop 변수는 for 문이 끝남과 동시에 소멸한다.
이는, 지역변수의 성질에 대해 이해가 필요하다.
c 코드로 보는 지역변수의 개념 정복
void SampleFunc()
{
{
int i =0 ;
for ( ; i < 100 ; ++ i )
{
printf ( " %d", i ) ;
}
} // int i = 0 ; 변수 i 는 이 라인을 통과 함으로써 지역변수로써 존재가 소멸된다.
i = 200 ; // error
{
int i = 1 ; // ok 위의 int i = 0 ; 과는 별개의 지역변수이다.
// ......
}
}
위의 코드는 빌드 되지 않는다.
컴파일러는 i = 200 ; 이라는 부분에서 오류를 낼것이다. i 는 존재하지 않기 때문이다.
이에 따른 지역변수의 완벽한 이해 및개념 역시 c, c++ 등의 언어를 통해 연마해야 할 것이다..
10. break
- c 와 용도 및 원리가 동일하다.
※ C, C++ 에선 없는것..
- "1" + 1 은 2 가 됩니다.
- "1 + 1 " 은 문자열로 "1 + 1" 이 됩니다.
- "abcd" + 1 은 오류를 냅니다.
※ 이러한 형의 선언이 없는것들끼리 섞이는건.. 혼선이 일어나는건 아닐련지..
- if a ~= b then 이와 같은 문법은 c 에서 표현할 경우 if( a != b ) 가 된다. (부등)
이 외의 다른 관계연산은 c 와 같다.
※루아에서 없는것..
- 루아는 나머지 연산자 ( % ) 가 존재 하지 않는다. ( 이게 얼마나 중요한건데 --; )
차기 버전에 추가될 것이라 한다. ( 5.0 이하 버전엔 없음 )
- switch 와 case 가 없다.. 이로 인해 if 신공만이 만병통치약이 되겠군요
TIP
◈ 단정도 실수형 float 4 바이트 -1.2E - 38 ~ 3.4E38
◈ 배정도 실수형 double 8바이트 2.2E - 308 ~ 1.8E308
- 현재 루아 5.0 에는 배정도 부동소수점만 쓴답니다.
- 그렇지만 컴파일시 단정도 부동소수점을 사용하도록 설정하는것이 가능하다 합니다.
- 루아 5.1 버전에서 정수 형식이 추가될것이라 하는군요..
3.14e8 ( 3.14 * 10의 8승, 314,000,000 == 3.14 * 100,000,000 )
3.14e-2 ( 3.14* 10의 -2승, 0.314 == 3.14 * 0.1 )
최근 업데이트 : 2006. 1. 13
작성자 : 되엔자앙 ( 권진영 ) - rpna@korea.com
from - http://cafe.naver.com/createwindow.cafe
정보란 공유를 위함이다. 수정 및 배포는 자유입니다.
다만, 출처를 분명히 하며 절대 상업적 목적에 사용될 수 없습니다.
대한민국이 강해질 그날까지..
'Computer Science' 카테고리의 다른 글
아키텍쳐 서술의 추천 프랙티스 (0) | 2009.07.18 |
---|---|
Plot Graphic Library (0) | 2009.07.16 |
프로그래밍 언어 Mini-HOWTO (0) | 2009.06.21 |
Open source programming languages for kids (0) | 2009.06.21 |
VC++ Example Source: 2D Chart and 3D Plot Print Chart Control (0) | 2009.06.21 |