노력과 삽질 퇴적물

루아: 기초정리(2) 본문

프로그래밍note/언어. 스크립트 계열

루아: 기초정리(2)

MTG 2019. 6. 6. 17:50

* 윈도우10(64bit), Lua 5.3.5.기반입니다.

루아: 기초정리(1)

루아: 기초정리(2)

루아: 기초정리(3)

 

 

 

 

 

1. 자료형과 변수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
--scope가 global로 지정된 변수
gContext = nil;     --루아식 null
gVal = -1;
gTblList1, gTblList2 = {}, nil--루아에 있는 득특한 자료형. 리스트와 테이블을 오감.
 
--scope가 local로 지정된 변수
local lContext = nil;
local lVal = -1;
local lTblList1, lTblList2 = {}, nil;
 
 
gContext = 'ANALOG-GREEN' .. ' ' .. 'this blog is doodle';
print('1) gContext=' .. gContext);  --[..] String basic append
print('2) gContext=', gContext);
gContext = '2019';
gVal = tonumber(gContext)+6;
print('tonumber(gContext)+6=' .. gVal);
 
print('(before)gTblList1=' .. #gTblList1);
--print('(before)gTblList2=' .. #gTblList2);    --null error
gTblList1[1= 'Hello';
gTblList1[2= ', ';
gTblList1[3= 'World!';
gTblList2 = {'Saluton''~''Mondo!'};
print('(after)gTblList1=' .. #gTblList1 .. ', [idx.0]='..gTblList1[1]);
print('(after)gTblList2=' .. #gTblList2 .. ', [idx.0]='..gTblList2[1]);
cs
--실행결과.
1) gContext=ANALOG-GREEN this blog is doodle
2) gContext=    ANALOG-GREEN this blog is doodle
tonumber(gContext)+6=2025
(before)gTblList1=0
(after)gTblList1=3, [idx.0]=Hello
(after)gTblList2=3, [idx.0]=Saluton

 

 

 

 

 

2. 기본 제어

1) 연산자, 산술

1
2
3
4
5
6
7
8
9
10
11
12
gVal1, gVal2 = 20196;
 
print('gVal1+gVal2=' .. gVal1+gVal2);
print('gVal1-gVal2=' .. gVal1-gVal2);
print('gVal1*gVal2=' .. gVal1*gVal2);
print('gVal1/gVal2=' .. gVal1/gVal2);
print('gVal1/0='     .. gVal1/0);
print('gVal1%gVal2=' .. gVal1%gVal2);
--print('gVal1%0='     .. gVal1%0); --ERROR
print('0%gVal2='     .. 0%gVal2);
print('gVal1^gVal2=' .. gVal1^gVal2);
print('-gVal1='      .. -gVal1);    -- newVal == prevVal*-1
cs
--실행결과. 
gVal1+gVal2=2025 
gVal1-gVal2=2013 
gVal1*gVal2=12114 
gVal1/gVal2=336.5 
gVal1/0=inf 
gVal1%gVal2=3 
0%gVal2=0 
gVal1^gVal2=6.773574528902e+019 
-gVal1=-2019

 

 

2) 연산자

> 주의사항. ++나 --같은 축약연산자가 없습니다.

다른 언어에서 [A!=B]인 비교연산자 루아에서는 [A~=B]이고,

||     -> or

&& -> and
!     -> not인것만 주의하면 다른 언어의 연산자와 비슷합니다.

 

만약, 루아로 프로그래밍 언어자체를 처음 시도하시는거면 아래의 페이지 정독 추천드립니다.
Lua Operators

 

 

3) 루프문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
local looEndIdx = 5;
local addVal = 0;
 
local loopResult1 = 0;
--basic loop type
for idx = 0, looEndIdx do   --loop start~end
    loopResult1 = loopResult1+idx;
end
print'loopResult1=' .. loopResult1 );
 
 
local loopResult2 = 0;
addVal = 0;
--repeat loop type
repeat
    addVal = addVal+1;
    loopResult2 = loopResult2+addVal;
until( addVal >= looEndIdx )    --loop end condition
print'loopResult2=' .. loopResult2 );
 
 
local loopResult3 = 0;
addVal = 0;
--while loop type
while( addVal < looEndIdx )     --loop run condition
do
    addVal = addVal+1;
    loopResult3 = loopResult3+addVal;
end
print'loopResult3=' .. loopResult3 );
cs
--실행결과
loopResult1=15
loopResult2=15
loopResult3=15

 

4) 조건문&제어문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
local msg = nil;
local loopLeng = 10;
 
for idx=0, loopLeng do
    if idx==0 then
        print('idx==0');
    elseif idx==1 then
        msg = 'ANALOG-GREEN';
        print('idx==1  msg=' .. msg);
    elseif (idx==2) then
        print('(idx==2)');
    elseif idx==3 then
        msg = 'loop exit';
        print('idx==3  msg=' .. msg);
        break;
    elseif idx==4 then
        msg = 'never reach';
        print('idx==4  msg=' .. msg);
    end
end
cs
--실행결과
idx==0
idx==1  msg=ANALOG-GREEN
(idx==2)
idx==3  msg=loop exit

 

 

 

 

 

3. 함수와 모듈

1) 함수 반환값

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function DoPrint(argFuncName, argContext)
    --return 이 없는 함수형태
    print('['..argFuncName..'] ' .. argContext);
end
 
function GetAdd(arg1, arg2)
    --return 이 있는 함수형태
    result = arg1+arg2;
    DoPrint('GetAdd', result);
 
    return result;
end
 
 
local valByFuncReturn = GetAdd(20196);
cs
--실행결과
[GetAdd] 2025

 

2) 함수인자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function FormA()            --basic function form 1
    print('called FormA');
end
 
function FormB(arg1, arg2)  --basic function form 1
    local result = arg1+arg2;
    print('called FormB, result=' .. result);
end
 
gFormC = function(arg1, arg2)
    --익명함수(Anonymous function)와 유사.
    --함수를 변수처럼 사용하는 방식이기도.
    print('called FormC(alike Anonymous func.), arg1='..arg1 .. ', arg2='..arg2);
end
 
function FormD(arg1, arg2, argFunc)   --unusual function form in LUA (2)
    local result = arg1+arg2;
 
    print('called FormD');
    print('-------------');
    FormA();
    argFunc(arg1, arg2);
    print('-------------');
end
 
function FormE(...)
    --가변 함수 인자
    local arg = {...};
    local result = #arg;
    print('called FormE, result=' .. result);
end
 
 
 
FormD(20196, gFormC);
FormE();
FormE(201966);
FormE("A""B""C""E");
cs
called FormD
-------------
called FormA
called FormC(alike Anonymous func.), arg1=2019, arg2=6
-------------
called FormE, result=0
called FormE, result=3
called FormE, result=4

 

 

4. 에러처리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function Something()
    local param1 = 2019;
    local param2 = 6;
 
    return param1 * param2;
end
 
function SomethingError()
    local param1 = 2019;
    local param2 = "SalutonMondo!";
 
    return param1 * param2;
end
 
function ErrorManager(argErr)
    print('argErr: ' .. argErr);
end
 
 
 
if pcall(Something) then
    print("[pcall] Something, ERROR X"); 
else
    print("[pcall] Something, ERROR O");
end
 
--error check form 1
if pcall(SomethingError) then
    print("[pcall] SomethingError, ERROR X"); 
else
    print("[pcall] SomethingError, ERROR O");
end
 
--error check form 2
local response = nil;
response = xpcall( Something, ErrorManager );
print('[xpcall] Something, response:', response);
response = xpcall( SomethingError, ErrorManager );
print('[xpcall] SomethingError, response:', response);
cs
--실행결과
[pcall] Something, ERROR X
[pcall] SomethingError, ERROR O
[xpcall] Something, response:   true
argErr: d:\Projects-vsCode\testLua\ErrManager.lua:12: attempt to perform arithmetic on a string value (local 'param2')
[xpcall] SomethingError, response:      false

 

 

 

 

 

기타. 참조자료

 

Lua Tutorial

 

 

 

 

 

기타. 변경이력

 

일자

변경이력

2019-06-06

초안.

'프로그래밍note > 언어. 스크립트 계열' 카테고리의 다른 글

JS ajax: jsonp  (0) 2019.10.27
루아: 기초정리(1)  (0) 2019.05.26
HTML5: cocos2d-js 기초 (1)  (0) 2018.05.23
파이썬3: 기초정리(2)  (0) 2018.05.18
파이썬3: 기초정리(1)  (0) 2018.05.14