[Lua] 기초 문법

z-wook·2024년 4월 6일
1

Lua란?

Lua(루아)는 확장성이 뛰어나며 가볍고 실행 속도가 굉장히 빠른 스크립트 언어입니다.


주석

-- 한 줄 주석

--[[
여러 줄 주석
]]

변수 (지역, 전역)

  • 변수 선언 시 아무런 글자를 붙이지 않으면 전역 변수로 선언됩니다.
  • 지역 변수를 선언하려면 "local"을 붙여야 합니다.

자료형

  • nil : 빈 값, (Swift의 nil과 같으며, 타 언어에서의 null)
  • boolean : true / false
  • number : 소수, 정수를 포함한 숫자
  • string : 문자열
  • function : 로직을 포함한 함수를 나타내는 변수는 유형도 function입니다
  • table : 여러 변수들의 그룹
    Lua에서 테이블은 배열, 딕셔너리 기능을 모두 할 수 있습니다.
local Table = {2, 5, "s", true, false, a = 2, {2,4,f = 2}, "g"}

연산자

  • 관계 연산자
    ~= : 다르다 (타 언어에서의 !=)
  • 논리 연산자
    Python과 동일하게 and, or, not을 사용합니다.
local t = { "hello", " lua", "world" }
print(t[1] .. t[2] .. " table count is " .. #t)

// 결과
hello lua table count is 3

조건문

  • if
local num = -5

if (num == 0) then
  print("num is zero")

elseif (num < 0) then
  print("num is negative")

else
  print("num is positive")
end

❗️사용 방법
1. 조건의 끝에 반드시 then을 붙여야 합니다.
2. 조건문이 끝나면 반드시 end를 붙여야 합니다.


반복문

  • while
a = 0

while (a < 10) do
  print("a: " .. a)
  a = a + 1
end

  • for
for i = 0, 10, 1 do
   print(i)
end

for (시작 값, 비교 값, 증가 값)이라고 생각하면 됩니다.


  • repeat until
a = 0

repeat
   print("value of a: ", a)
   a = a + 1
until( a > 10 )

Table

Lua에서의 테이블은 Array와 Dictionary의 특징을 모두 가질 수 있습니다.
또한 index가 1부터 시작됩니다.

table = { "abc", 1, 2, name = 'han', age = 28, 999 }

print(table[1])
print(table.name)
print(table[4])

// 결과
abc
han
999

인덱스를 카운트할 때 name = "han"과 같이 키값을 가지는 값이 있으면 무시하고 index를 카운트합니다.

table = { "abc", 1, 2, name = 'han', age = 28, 999 }

print("pairs test")
for key, value in pairs(table) do
  print("key: " .. key, "value: " .. value)
end

print("")

print("ipairs test")
for index, value in ipairs(table) do
  print("index: " .. index, "value: " .. value)
end

// 결과
pairs test
key: 1  value: abc
key: 2  value: 1
key: 3  value: 2
key: 4  value: 999
key: name   value: han
key: age    value: 28

ipairs test
index: 1    value: abc
index: 2    value: 1
index: 3    value: 2
index: 4    value: 999
  • pairs : 테이블 안의 요소 전체를 보여줍니다.
  • ipairs : 테이블 안의 index만 보여줍니다.
table = {
  ["햄버거"] = 8000, ["치킨"] = 12000,
  ["피자"] = 15000, ["파스타"] = 14000,
  ["콜라"] = 1000, ["사이다"] = 1000
}

for key, value in pairs(table) do
  print(key, value)
end

// 결과
피자    15000
햄버거  8000
치킨    12000
사이다  1000
콜라    1000
파스타  14000

key에 문자열을 넣으려고 할 때 []를 사용하여 key를 설정할 수 있습니다.


함수

local function add(a, b)
  print(a, b)
  return a + b
end

print(add(2, 1.2))

함수에 local을 붙이면 local 함수, 아무것도 없으면 global 함수가 됩니다.

function average(...)
  local result = 0
  local arg = { ... }

  for i, v in ipairs(arg) do
    result = result + v
  end

  return result / #arg
end

print("average = " .. average(10, 5, 3, 4, 5, 6))

함수의 파라미터가 확정되지 않았을 때 ... 형태로 넘겨서 함수 안에서 하나씩 불러 쓸 수 있습니다.


출력

local year = 2024
local pi = 3.141592
local hi = "hello world"

print(string.format("%d년", year))
print(string.format("원주율 = %f", pi))
print(string.format("인사: %s", hi))

// 결과
2024년
원주율 = 3.141592
인사: hello world

입력받기

for line in io.lines() do
    return line
end

파일 입출력

파일 읽어오기(import)

dofile("C:\Users\GEN11\Desktop\Work\script.lua")

파일 열기

szFile = io.open("C:\Users\GEN11\Desktop\Work\data.txt", "r")

한 줄씩 읽기

for line in szFile:lines() do
  print(line)
end

etc(기타)

문자열 합치기 : ..

ex) print("hello".." world")

배열 / 테이블의 요소 개수 : #

ex) #t

Swap

t[i], t[i + 1] = t[i + 1], t[i]


⚠️ 주의할 점

  1. Table의 인덱스가 1부터 시작합니다.
  1. 복합 대입 연산자를 지원하지 않습니다.
    따라서 a += 1을 사용할 수 없고 a = a + 1로 작성해야 합니다.
  1. 논리 연산자 !=를 Lua에서는 ~=로 사용합니다.
profile
🍎 iOS Developer

0개의 댓글