코드는 위에서 아래로 실행되며, 위쪽에서 아래에 선언된 함수나 변수를 호출할 수 없습니다.
SomeFunc() -- 오류 발생localfunctionSomeFunc()print("SomeFunc")endSomeFunc() -- 정상 작동
변수
루아에서는 변수를 선언할때 정수/실수/문자열 등 자료형을 명시하지 않으며, 변수의 범위는 해당 스크립트에서만 접근 가능한 local과 다른 스크립트에서도 접근 가능한 global로 지정할 수 있습니다.
-- 로컬 변수 (선언한 해당 스크립트에서만 접근 가능)local Num1 =5local Num2 =1.66-- 전역 변수 (다른 스크립트에서도 접근 가능)SomeVar =50print(SomeVar) -- 50 출력-- 변수 다중 할당 가능local Text1, Text2 ="A", "B"-- 변수에 함수를 할당하고 변수로 호출 가능localfunctionSomeFunction()print("SomeFunction")endlocal Func = SomeFunctionFunc()
함수
함수의 범위는 변수와 마찬가지로 해당 스크립트에서만 접근 가능한 local과 다른 스크립트에서도 접근 가능한 global로 지정할 수 있습니다.
-- 함수 인자나 반환값은 정해진 것보다 많으면 버려지고 적으면 nil로 처리된다.localfunctionGetVector(x,y,z) print("GetVector X", x, "Y", y, "Z", z)endGetVector(1, 0) -- z는 nilGetVector(1, 0, 5, 3) -- 마지막 값은 버려짐-- 여러 값을 반환하거나, 변수 다중 할당도 가능localfunctionGetVector(x,y,z) return x, y, zendlocal x, y, z =GetVecor(1, 0, 1) -- 함수의 가변 인자는 ...로 표시localfunctionSum(...) local a, b, c =...-- 부족한 인자는 nil로 처리된다.endSum(1, 2)-- 가변 인자는 고정 매개변수와 함께 사용하는 것도 가능localfunctionSum(value, ...) end-- 반환 값도 가변 인자로 처리 가능localfunctionSum(...)return...end
제어문
제어문은 코드의 흐름(실행 순서)을 제어하기 위해 사용됩니다.
if
if SomeNumber >0thenprint("Positive Number")elseif SomeNumber >0thenprint("Negative Number")elseprint("Zero")end
-- 조건이 true가 될때까지 코드 반복repeatwait(0.1) until SomeCondition
논리 연산자
논리 연산자는 조건문이나 제어문에서 조건을 결합하거나 판단하기 위해 사용됩니다.
-- if문 안에서 논리 연산자 사용if isMonster ==trueand isBoss ==truethenprint("Monster")endif isWalk ==trueor isRun ==truethenprint("On the move")endifnot isCharacter thenprint("Not Character")end-- 조건에 따른 인자 반환local resultA = a and b -- 첫번째 인자가 거짓이면 첫인자, 진짜면 두번째 인자 반환local resultB = a or b -- 첫번째 인자가 진짜면 첫인자, 거짓이면 두번째 인자 반환local resultC =not a -- nil과 false는 true로 반환
테이블
키-값 쌍으로 데이터를 저장할 수 있는 복합 데이터 구조로, 배열과 같은 데이터도 관리할 수 있습니다.
local NumberList = { 1, 2, 3 }print(#NumberList) -- 테이블의 크기 반환-- 배열 구현local MatrixData = {}for x =1, 5do MatrixData[x] = {}for y =1, 2do MatrixData[x][y] ="Coordinate_" .. x .."x" .. yprint(MatrixData[x][y])endend-- Key(Name)와 Index(EquipItemIDList)로 구성된 테이블local MonsterData ={ Name ="Orc", EquipItemIDList = {1, 5, 4 } }print(MonsterData.Name)print(MonsterData["Name"])for i =1, #MonsterData.EquipItemIDList doprint(MonsterData.EquipItemIDList[i])end
코루틴
코루틴(Coroutine)은 실행을 일시 중단하고 필요한 시점에 다시 재개할 수 있는 기능을 제공합니다. 일반 함수와 달리, 코루틴은 멈췄던 상태를 유지한 채 이어서 실행할 수 있으므로, 비동기 작업이나 복잡한 흐름 제어에 유용합니다.
print("1")local printCoroutine =coroutine.create(function()wait(2)print("2")end)coroutine.resume(printCoroutine)print("3") -- 코루틴은 비동기처럼 실행되므로 1->3->2 순으로 출력된다.