본문 바로가기

Lua

Lua 문법 20분만에 끝내기 (유투브 강의 링크)

 

Lua 문법 20분만에 끝내기 유투브 강좌 수강 내용 정리 본입니다.

프로그래밍 언어에 대해 익숙한 분을 기준으로 20분만에 Lua 문법을 익힐 수 있도록 정리해 둔 강의입니다.

20분만에 루아 언어에 대한 대략적인 특징을 알 수 있어 좋은 것 같아요.

강의 링크

https://www.youtube.com/watch?v=tiJlxyGumS0&t=51s

 

Lua 스크립트 실습 환경

사이트에 접속하면 회원가입 없이 테스트 가능하며, 회원가입을 하게되면 저장 및 부가 기능을 사용할 수 있습니다.


아래 내용은 강좌 내용의 요약 본으로 설명은 위 유투브 강좌를 참고하시기 바랍니다.

변수 범위

 

local 변수 범위

a=3

print(a)

if true then
    local a = 20
    local b = "bbbb"
    print(a)
    print(b)
end

print(a)
print(b)
 

실행 결과

3
20
bbbb
3
nil
 

타입

 

type 종류 : number, string, nil, boolean, table
local a = 10
print(type(a))

a = nil
print(type(a))

a = "hello"
print(type(a))

a = 3213.1231
print(type(a))

a = (1>3)
print(type(a))

b = {"Lua", "Tutorial"}
print(type(b))
 

실행 결과

number
nil
string
number
boolean
table
 

연산

 

.. : 문자열 붙이기

# : 배열/테이블 갯수

local a = {'hi','my', 'name', 'is', 'pareko'}
print(#a)
print(a[1].."!! "..a[2]..' '..a[3].." "..a[4]..", "..a[5])

실행 결과

5
hi!! my name is, pareko

 

반복문

 

while 문

a = 10
while (a<20)
do
    print("value of a :",a)
    a = a + 1
end
 

실행 결과

value of a :	10
value of a :	11
value of a :	12
value of a :	13
value of a :	14
value of a :	15
value of a :	16
value of a :	17
value of a :	18
value of a :	19

for 문

for i = 10, 20, 1
do
    print(i)
end
 

실행 결과

10
11
12
13
14
15
16
17
18
19
20
 

조건문

 

local a = false
local b = true

if( a and b)
then
    print("a and b is true")
else
    print("a and b is false")
end
 

실행 결과

a and b is false
 
if false
then
    print(1)
else if true
    then
        print(2)
    else
        print(3)
    end
end

실행 결과

2

 

함수

 

함수 정의 / 호출

local function hello(a,b)
    print("Hello World")
    return 123
end

hello()
print(type(hello))
print(hello) <-- 함수 참조
print(hello()) <-- 함수 실행

실행 결과

Hello World
function
function: 0x55885c6030b0
Hello World
123

함수 전달

myprint = function(param)
    print("This is my print function  = ##",param,"##")
end

function add(num1, num2, functionPrint)
    result = num1+ num2
    functionPrint(result)
end

myprint(10)
add(2,5,myprint)

실행 결과

This is my print function  = ##	10	##
This is my print function  = ##	7	##

파라미터가 확정되지 않은 경우

function average(...)
    result = 0 
    local arg = {...}
    for i,v in ipairs(arg) do
        result = result + v
    end
    return result/#arg
end

print("The average is ", average(10,5,3,4,5,6))

실행 결과

The average is 	5.5

 

스트링

 

myname="pareko"
print(string.upper(myname))

day=17;month=6;year=2022
print(string.format("Date : %04d-%02d-%02d", year, month, day))
print(string.format("%.3f",1/3))
print("Hello! "..myname)
print(string.rep("WHAT! ", 10))
 

실행 결과

PAREKO
Date : 2022-06-17
0.333
Hello! pareko
WHAT! WHAT! WHAT! WHAT! WHAT! WHAT! WHAT! WHAT! WHAT! WHAT!
 

Array

 

Array : table의 일종, 동일한 값만 들어감

aa = {}

print(type(aa))

aa = {"a","b","c","d","e","f"}
print("size : "..#aa)

for i=1,#aa do
    print(aa[i])
end

aa = {1,2,3,4,5}
print("size : "..#aa)

for i =1,#aa do   <-- 1부터 시작
    print(aa[i])
end

실행 결과

table
size : 6
a
b
c
d
e
f
size : 5
1  
2
3
4
5

2차원 배열

m_array = {}

for i = 1,10 do
    m_array[i] = {}
    for j=1, 10 do
        m_array[i][j] = i*j
    end
end

for i = 1,10 do
    for j=1,10 do
        print("["..i.."]["..j.."]"..m_array[i][j])
    end
end

실행 결과

[1][1]1
[1][2]2
[1][3]3
[1][4]4
[1][5]5
[1][6]6
[1][7]7
[1][8]8
[1][9]9
[1][10]10
...
[10][6]60
[10][7]70
[10][8]80
[10][9]90
[10][10]100

 

table

 

t = { "aaa", 1,2, name="pareko", age=12, school="roblox School", 999}
print('== pairs iteration')

for k,v in pairs(t) do  <-- 인덱스 없이 모두 꺼낼 수 있음
    print(k,v)
end

print('== ipairs iteration')
for i,v in ipairs(t) do  <-- 키가 없고 인덱스만 있는 값을 꺼낼 수 있음
    print(i,v)
end

print("-- 접근")
print(t.name)
print(t["name"])
print(t[1])

실행 결과

== pairs iteration
1	aaa
2	1
3	2
4	999
age	12
name	pareko
school	roblox School
== ipairs iteration
1	aaa
2	1
3	2
4	999
-- 접근
pareko
pareko
aaa