Lua#2
1. 조건문, 반복문
루아 언어에서의 조건문과 반복문은 개인적인 생각으로 간단히 선언되면서도, 직관적인 표현, 단순하게 표현이 가능합니다. 우선 그 중에서 조건문은 if then elseif else end 의 키워드로 구성된다.
1-1. 조건문
if문은 비교 조건문에 따라서 참과 거짓인 두가지로 구분되어 참영역과 거짓 영역이 실행되는 명령문입니다! 비교 조건은 아래 코드영역에서 설명을 추가하도록 하겠습니다!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
function add(a)
return a + 10
end
foo = 10
bar = add(foo)
function ifStmt()
if foo > bar then
return "hello"
else
return "world"
end
end
if foo == 15 then
print "foo"
elseif foo == 10 then
print "foo10"
else
print "None"
end
|
cs |
최대한 앞서 배운 루아의 문법을 사용해 코드를 작성했습니다. 한번 쭈욱 읽어보시길 권합니다!!
1-2. 반복문
반복문은 제어문의 조건문처럼 조건문이 존재해 조건문이 만족할 때 까지 반복하는 명령문의 하나라고 보시면 됩니다. 루아에서는 while반복문 뿐 만 아니라 for, repeat등 두개의 반복문이 추가로 존재합니다. 그 중 while, repeat은 비슷하면서도 다른 반복명령문인데, while 명령문 같은 경우에는 비교조건이 실행영역 이전에 선언되지만, repeat 명령문은 실행영역이 먼저 선언되어 실행된 후 조건문이 거짓일 때 까지 반복 실행한다는 특징이 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
function whileStmt()
local foo = 10
while foo ~= 0 do
print (foo)
foo = foo - 1
end
end
function repeatStmt()
local foo = 10
repeat
print(foo)
foo = foo - 1
until foo == 0
end
repeatStmt()
whileStmt()
|
cs |
위와같은 특징을 가집니다. whileStmt()함수 내부에 선언된 로컬 변수 foo는 0이 아닐때 까지 아래 실행영역을 반복합니다. 이때 주의해야할 점은 while --조건문-- do 라고 사용해주며 동시에 while영역의 종료점에는 end키워드를 사용해서 while영역이 끝남을 알려야합니다!
repeatStmt()같은 경우는 같으면서도 다른 방식으로 동작합니다. 우선 코드를 먼저 실행시킨후 until키워드에서 foo가 0과 같을 때 까지라고 되어있는 것 같지만, 사실은 foo가 0이 아닐 때 코드 동작을 종료하는 방식으로 비슷하면서도 다른 키워드입니다. 물론 개발자 본인의 입맛에 맞게 사용하는것이 좋을 것 같다는 생각을 합니다!!
다음으로 For반복문 입니다. 가장 많이 사용되는 반복문으로 개발자 본인이 원하는 만큼 반복이 가능하기 때문에 무한 반복의 여지가 없다는 점이 장점으로 반복문 중 가장 많이 사용되는 키워드입니다.
1
2
3
4
5
6
7
|
for foo =1,4 do
print(foo)
end
for foo = 1,10,2 do
print(foo)
end
|
cs |
위와 같이 사용할 수 있으며 다른 조건-반복문과 동일하게 실행 영역이전에 do키워드를 사용해 실행 영역을 알려주고 end키워드로 종료해야합니다. 두번째 for 반복문인 경우에는 1부터 10까지 반복하지만, 2칸씩 띄워서 반복하는 수치 반복의 예제로 삽입한 코드입니다.
2. Generic Loop in For
루아에서는 제너릭하게 for구문을 사용할 수 있습니다. pairs, ipairs, next, io.lines(), file:lines(), 사용자 정의 반복문 등 다양한 방식으로 반복문을 사용하게 허락합니다. 그중에서 대표적인 pairs()와 ipairs(), next()를 설명해드리겠습니다!
pairs는 키-값의 쌍으로 된 반복함수로 파이썬의 딕셔너리를 출력시키는 것과도 유사하게 동작합니다.
1
2
3
4
5
6
7
8
9
10
11
|
foo = {a=1, b=2, c=4, "name"}
for key,value in pairs(foo) do
print(key,value)
end
result >
1 name
a 1
c 4
b 2
|
cs |
동작 시킨 결과 아래 결괏값대로 출력이 됩니다. 이때 키와 값의 쌍으로 이루어진 데이터에 대해서는 별도로 인덱스를 매기진 않으나 데이터가 싱글로 존재할 경우에 있어서 인덱스가 붙어 따로 출력이 된다는 것을 확인할 수 있습니다. ipairs는 integer의 약자 i를 이용해 표현한 함수로서, 인덱스를 숫자로 표기할 수 있는 경우에만 출력된다는 특징이 있는 함수입니다.
1
2
3
4
5
6
7
8
9
10
11
|
foo = {a=1, b=2, c=4, "name"}
for key,value in next, foo, nil do
print(key,value)
end
result >
1 name
a 1
c 4
b 2
|
cs |
next는 시작위치를 nil로 초기화해 맨 처음부터 시작해 맨 끝점에 다다르면 nil을 반환하며 종료하는 pairs와 같이 사용해도 되는 helperfunction의 일종이며, 혼자서 사용되어야할 경우에는 위와 같이 사용될 수 있습니다!!
다음 포스팅에는 메타 테이블에 관련한 포스팅을 할 예정입니다!!! 루아에 대해서 최대한 가볍게 정리할겸 포스팅을 한건데 오히려, 너무 복잡하게 설명한건 아닌지....
댓글로 피드백 주세요ㅜㅜ 언제든 환영합니다!!
LUA스크립트 눈 깜짝할 새 배우기@#3
1. 메타 테이블 및 메타 함수 루아를 완벽하고 강력하게 사용하기 위해선 메타 테이블을 사용해야만 합니다! 루아에서 테이블은 강력한 자료구조형으로 키와 값의 쌍 및 관련 메타함수를 사용해
hazarddev.tistory.com
'Lua' 카테고리의 다른 글
LUA스크립트 눈 깜짝할 새 배우기@#3 (2) | 2020.11.25 |
---|---|
LUA스크립트 눈 깜짝할 새 배우기@#1 (5) | 2020.11.24 |
댓글