SlideShare a Scribd company logo
Lua 문법 (1)
연산자, 변수, 문자열, 불 값, 분기문, 반복문 등
 사용할 루아 버전은 5.1.4
 https://sourceforge.net/projects/luabinaries/files/5.1.4/T
ools%20Executables/
 lua5_1_4_Win32_bin.zip 또는 lua5_1_4_Win64_bin.zip
다운로드
 압축을 푼 폴더의 경로를 윈도 환경 변수에 등록
변수 이름은 LUA_DIR
 루아 인터프리터 lua.exe
루아 설치 및 사용 환경 설정
교재는 이 책(2장, 3장, 4장, 7장, 8장)이지만,
Lua 5.1을 설명하는 책이면 다른 책으로 공부해도 됩니다.
 시스템 쉘(윈도의 경우 시작 메뉴에서 cmd 실행)에서
lua라고 입력해서 루아 인터프리터 실행
 프람프트가 > 로 바뀌면서 루아 인터프리터가 사용자의
입력을 기다림
 인터프리터는 코드를 입력할 때마다 줄 단위로 실행
 잘못된 코드를 입력하면 에러 메시지 출력
 문법적 잘못은 없지만 완료되지 않은 코드를 입력하면
프람프트가 >> 로 바뀌면서 새로 입력 받은 내용을 이전
입력의 뒤에 붙여서 해석
루아 인터프리터 lua.exe
 더하기 + 빼기 –
 곱하기 * 나누기 /
 지수 ^
 일반적인 수식 계산법에 따른 우선 순위
> print(25 – 2^3 * 3 + 81 / 9) 10
 scientific notation: 매우 크거나 작은 수 표현
예) 1.345e14, 5.34e-21
 16진수 표현: 숫자 앞에 0x 또는 0X를 붙이면 16진수
 정수만 지원 >print(0x1f.ff) 에러
산술연산자
 변수명은 알파벳, 숫자, _로만 이루어지며,
알파벳이나 _로만 시작해야 한다.
 알파벳 대소문자를 구분한다.
 루아 예약어는 변수명으로 사용할 수 없다.
루아 예약어: and, break, do, else, elseif, end, false, for,
function, if, in, local, nil, not, or, repeat, return, then,
true, until, while
 변수의 데이터 타입은 정해져 있지 않다. 예를 들어,
숫자를 저장했던 변수에 문자열을 대입해도 된다.
변수
 변수명 = 대입할 값
= 표시 오른쪽에 있는 값을 왼쪽에 있는 변수에 저장
 한번에 여러 개의 변수에 값을 대입할 수도 있다.
> a, b, c = 1, 2, 3
 여러 변수의 값을 서로 바꿀 때도 대입문 한 줄로 처리
> a, b, c = b, c, a
> print(a, b, c)
2 3 1
대입
 문자열을 표현하는 3가지 표현법이 있다.
① 큰따옴표 “This is a string.”
: 문자열 안에 작은따옴표가 있는 경우에 사용
② 작은따옴표 ‘This is also a string.’
: 문자열 안에 큰따옴표가 있는 경우에 사용
③ 대괄호 [[This is a long string.]]
: 여러 줄로 된 문자열을 쉽게 만들 수 있다.
> a = [[abc
>> def]]
> print(a)
문자열
 큰따옴표 문자열이나 작은따옴표 문자열 안에 백슬래시
문자(한글 자판에서 )를 사용해서
특별한 의미를 나타내는 것
 큰따옴표 문자열 안에서 큰따옴표 표시법 "
 작은따옴표 문자열 안에서 작은따옴표 표시법 '
 문자열 안에서 백슬래시 표시법 
 여러 줄로 된 문자열 표시법
① long string
② n
③ (newline)
백슬래시 이스케이핑 (Backslash Escaping)
이스케이프 씨퀀스
ASCII 코드 (윈도)
 A < B A가 B보다 작으면 true, 아니면 false
 A > B A가 B보다 크면 true, 아니면 false
 A <= B A가 보다 작거나 같으면 true, 아니면 false
 A >= B A가 보다 크거나 같으면 true, 아니면 false
 A == B A와 B가 같으면 true, 아니면 false
 A ~= B A와 B가 다르면 true, 아니면 false
 관계연산자의 피연산자로 문자열을 사용하면,
두 문자열의 서로 다른 첫 번째 문자의 순서를 비교
"abcd" < "abce" true
관계연산자와 불 값
 아무 값도 없음을 나타내는 값,
예를 들어, 초기화하지 않은 변수를 print하면 nil 출력
 여러 변수 대입문에서 = 왼쪽 변수 개수가 오른쪽 값
개수보다 많으면, 남는 변수에는 nil이 대입됨.
> A, B, C, D = 1, 2
> print(A, B, C, D)
1 2 nil nil
 값 개수가 더 많으면, 남는 값들은 버림.
> A, B = 1, 2, 3, 4
> print(A, B)
1 2
nil 값
 루아에서는 false와 nil만 false로 간주한다.
0과 빈 문자열을 false로 간주하는 다른 언어와 다르다.
 A and B
A의 값이 false 또는 nil이면, A의 값을 결과로 사용,
A의 값이 그 외의 값이면, B의 값을 결과로 사용
 A or B
A의 값이 false 또는 nil이면, B의 값을 결과로 사용,
A의 값이 그 외의 값이면, A의 값을 결과로 사용
 not A
A의 값이 false 또는 nil이면, 결과는 true; 아니면 false
불 연산자 (and, or, not)
> B, C = "B was chosen", "C was chosen"
> A = true
> print(A and B or C)
B was chosen
> A = false
> print(A and B or C)
C was chosen
[예외] 그러나, B가 false면 A와 관계없이 결과는 C
그러므로, 양자택일로 쓰려면 B가 false, nil이 아니어야 함.
A and B or C
"A가 true면 B, false면 C" (양자택일)
 두 문자열을 연결해서 한 문자열을 만드는 연산자 ..
> print("App" .. "le")
Apple
 문자열에 포함된 문자 개수를 알려주는 연산자 #
(띄어쓰기, 문장부호, escape sequence 포함)
> print(#"I love you.n")
12
문자열 연결 연산자 ..
문자열 길이 연산자 #
 A % B 는 A에 B를 여러 번 더하거나 뺀 결과값이
0 ~ B 사이의 값(0 포함, B 포함하지 않음)이면
그 결과값을 알려준다.
 주어진 숫자를 일정한 범위 안에 넣을 때 사용
> print(15%12) > print(-15%12)
3 9
> print(15%-12) > print(-15%-12)
-9 -3
모듈로 연산자 %
 산술연산자의 피연산자는 숫자(를 저장한 변수)이어야
한다. 그러나, 숫자로만 구성된 문자열이 피연산자로
주어지면 숫자로 자동 변환해서 계산한다.
> print("2" + "4")
6
 문자열 연결 연산자의 피연산자는 문자열이어야 한다.
그러나, 숫자가 피연산자로 주어지면 문자열로 자동
변환해서 처리한다.
> print(11.1 .. -99.4)
11.1-99.4
피연산자의 자동 변환
 우선순위: 다른 종류의 연산자가 동시에 사용될 때 어느
연산자를 먼저 적용할 지 결정
 결합순서: 우선순위가 동일한 연산자들이 동시에
적용될 때 어떤 순서로 적용할 지 결정
 left-associative 연산자: 왼쪽에 있는 연산자부터 적용
 right-associative 연산자: 오른쪽에 있는 연산자부터 적용
 문자열 연결(..), 지수(^) 연산자를 제외한
대다수 루아 연산자는 left-associative이다.
 연산을 ()로 묶으면, 그것부터 적용한다.
2 * 3 – 4 ~= 2 * (3 – 4)
연산자 우선순위(precedence)와 결합순서(associativity)
1. ^ (지수; 오른쪽 결합)
2. not (부정; 단항연산자), - (음수; 단항연산자),
# (길이; 단항연산자)
3. * (곱하기), / (나누기), % (모듈로)
4. + (더하기), - (빼기)
5. .. (문자열 연결; 오른쪽 결합)
6. <, >, ~=, <=, ==, >= (관계연산자)
7. and (불 곱하기)
8. or (불 더하기)
루아 연산자
(위에 있는 것이 우선순위가 높다)
 한줄 주석: -- 뒤부터 그 줄 끝까지 주석으로 처리
> print("Hello") -- This is a comment.
 여러줄 주석: --[[ 뒤부터 ]]가 나올 때까지 주석 처리
> print("Hello") --[[ This is
>> a multi-line comment.]]
 여러줄 주석은 코드의 일부만 주석 처리할 때 유용
> print(2 + --[[2 +]] 2)
4
주석
 여러줄 주석으로 코드의 여러 줄을 가릴 때 다음과 같이
하면, 코드 활성화/비활성화를 – 하나로 할 수 있다.
비활성화된 코드 활성화된 코드
> --[[ > ---[[
>> print("Multiple") > print("Multiple")
>> print("lines.") Multiple
>> --]] > print("lines.")
lines.
> --]]
주석 tip
 Expression: 값을 가진 것
(예) 34, "string", false, variable, 3+4, #"string", 3>4
 Statement: 루아 인터프리터가 실행하는 루아 코드의
최소 단위
(예) 대입문, 함수호출문, if문, while문, for문 등
 Compound Statement: 다른 statements를 포함할 수
있는 statement
(예) if문, while문, for문, repeat문, do문
Expressions and Statements
if expression1 then
statements1
elseif expression2 then
statements2
else
statements3
end
elseif 구문과 else 구문은 없을 수도 있다.
if 문
while expression do
statements
end
expression을 평가해서 false나 nil이 아니면,
statements를 실행한다.
실행 후에는 다시 expression을 평가해서 false나 nil이
아니면, statements를 다시 실행한다.
expression이 false나 nil이 될 때까지 반복한다.
while 반복문
for 변수 = 시작 숫자, 끝 숫자, 더할 숫자 do
statements
end
변수에 시작 숫자를 대입하고, statements를 실행한다.
변수에 더할 숫자를 더하고 결과값이 끝 숫자를 지나치지
않았다면, 다시 statements를 실행한다.
이 과정을 반복하면서 변수값이 끝 숫자를 지나치면 끝낸다.
(시작 숫자에 더할 숫자를 아무리 더해도 끝 숫자에 도달하지
못할 경우에는 아예 statements를 실행 안 한다.)
for 반복문
 시작 숫자, 끝 숫자, 더할 숫자는 expression일 수 있다.
단, expression은 for문이 시작될 때 한번만 평가되고
반복되는 동안 그 값이 계속 사용된다.
 대조적으로 while 반복문은 반복할 때마다 조건식인
expression을 매번 평가한다.
for 반복문
> End = 5
> for I = 1, End do
>> End = End - 1 -- The loop doesn’t care that End is
>> -- being changed.
>> print(“I is “ .. I .. “ and End is “ .. End)
>> end
I is 1 and End is 4
I is 2 and End is 3
I is 3 and End is 2
I is 4 and End is 1
I is 5 and End is 0
 루프 변수(for 바로 뒤에 나오는 변수)의 사용범위는
오직 루프 안이다.
> N = “outside” -- 이 예에서 반복문 밖의 변수 N과
> for N = 1, 3 do -- 반복문 안의 변수 N은 다른 변수이다.
>> print(N)
>> end
1
2
3
> print(N)
outside
for 반복문
repeat
statements
until expression
statements를 실행한 후에 expression의 값을 평가한다.
false나 nil이면 statements를 다시 실행하고, false나 nil이
아니면 repeat 반복문을 끝낸다.
즉, expression이 false나 nil이 아닐 때까지 statements를
반복한다.
repeat 반복문
1. while은 처음에 조건식을 평가하고 실행여부를
결정하는 반면에, repeat은 처음에 한번 실행하고
조건식을 평가하므로, repeat은 무조건 한번은
실행하게 된다.
2. while은 조건식이 false나 nil이 아닌 동안 실행되지만,
repeat은 조건식이 false나 nil인 동안 실행된다.
3. while 반복문은 end로 끝나지만, repeat 반복문에는
end가 없다.
while 반복문과 repeat 반복문 비교
 break는 반복문(while, for, repeat)을 일찍 끝낸다.
 중첩된 반복문에 break가 쓰이면 break가 속한 단계의
반복문만 끝낸다. 상위 단계의 반복문은 계속된다.
 break는 사용하기 편리하지만, 디버깅할 때 코드를
이해하기 어렵게 만들 수 있으므로 남용하지 말아야 함.
break 문
 break는 다음과 같은 두 키워드 사이에 있는 statements
모음인 블록(block)의 마지막 statement이어야 한다.
 do, end
 repeat, until
 then, elseif(또는 else 또는 end)
 else, end
 그러므로, 디버깅 용도로 블록 중간에 break를 넣기
원할 때에는 do break end를 사용한다. (do 블록)
break 문
do
statements
end
 일단의 코드를 하나의 블록으로 묶어주는 역할
 루아 인터프리터는 do 블록 안의 코드를 한번에 처리
 블록은 지역 변수의 사용범위를 정하거나 break의
사용을 제한하는 역할을 한다. (이전 슬라이드 참고)
do 문

More Related Content

What's hot

Lets know about neutraceuticals
Lets know about  neutraceuticalsLets know about  neutraceuticals
Lets know about neutraceuticals
Shradha These
 
Câncer de Ovário - Solange Sanches
Câncer de Ovário - Solange Sanches Câncer de Ovário - Solange Sanches
Câncer de Ovário - Solange Sanches
Oncoguia
 
Quality Control Tests for Herbal Drugs
Quality Control Tests for Herbal DrugsQuality Control Tests for Herbal Drugs
Quality Control Tests for Herbal Drugs
Muhammad Asad
 
Consenso Nacional de Nutrição Oncológica
Consenso Nacional de Nutrição OncológicaConsenso Nacional de Nutrição Oncológica
Consenso Nacional de Nutrição Oncológica
Cíntia Costa
 
Alimentos e alimentao
Alimentos e alimentaoAlimentos e alimentao
Alimentos e alimentao
Simplício Carvalho
 
Cancer de mama completo
Cancer de mama completoCancer de mama completo
Cancer de mama completoBarbaraqsms
 
Herbal Remedies- Durgashree Diwakar
Herbal Remedies- Durgashree Diwakar Herbal Remedies- Durgashree Diwakar
Herbal Remedies- Durgashree Diwakar
Durgashree Diwakar
 
DOR EM RECÉM-NASCIDOS: COMO AVALIAR, PREVENIR E TRATAR
DOR EM RECÉM-NASCIDOS: COMO AVALIAR, PREVENIR E TRATARDOR EM RECÉM-NASCIDOS: COMO AVALIAR, PREVENIR E TRATAR
CHROMATOGRAPHY-PRINCIPLE, TYPES
CHROMATOGRAPHY-PRINCIPLE, TYPESCHROMATOGRAPHY-PRINCIPLE, TYPES
CHROMATOGRAPHY-PRINCIPLE, TYPES
AYESHA KABEER
 
sweetening and coloring agents
sweetening and coloring agentssweetening and coloring agents
sweetening and coloring agents
Debashis Das
 
Aleitamento materno.pptx.pdf
Aleitamento materno.pptx.pdfAleitamento materno.pptx.pdf
Aleitamento materno.pptx.pdf
VeraLuciaPereira24
 
BAB I - IV (PEMBUATAN KEJU)
BAB I - IV (PEMBUATAN KEJU)BAB I - IV (PEMBUATAN KEJU)
BAB I - IV (PEMBUATAN KEJU)
Phaphy Wahyudhi
 
Alimentação na 1ª infância
Alimentação na 1ª infânciaAlimentação na 1ª infância
Alimentação na 1ª infânciabecresforte
 
Kebijakan Pengawasan Keamanan Pangan - BPOM
Kebijakan Pengawasan Keamanan Pangan - BPOMKebijakan Pengawasan Keamanan Pangan - BPOM
Kebijakan Pengawasan Keamanan Pangan - BPOM
Stenly Mandagi
 
Tindak Lanjut PP No. 3/2107 tentang Otoritas Veteriner - Ditkeswan, 16 Maret ...
Tindak Lanjut PP No. 3/2107 tentang Otoritas Veteriner - Ditkeswan, 16 Maret ...Tindak Lanjut PP No. 3/2107 tentang Otoritas Veteriner - Ditkeswan, 16 Maret ...
Tindak Lanjut PP No. 3/2107 tentang Otoritas Veteriner - Ditkeswan, 16 Maret ...
Tata Naipospos
 
Apostila sunicultura basica
Apostila sunicultura basicaApostila sunicultura basica
Apostila sunicultura basica
Lenildo Araujo
 
SNI Sapi Potong
SNI Sapi PotongSNI Sapi Potong
SNI Sapi Potong
Rahardi Gautama
 

What's hot (18)

Lets know about neutraceuticals
Lets know about  neutraceuticalsLets know about  neutraceuticals
Lets know about neutraceuticals
 
Câncer de Ovário - Solange Sanches
Câncer de Ovário - Solange Sanches Câncer de Ovário - Solange Sanches
Câncer de Ovário - Solange Sanches
 
Creep feeding bovinos
Creep feeding bovinosCreep feeding bovinos
Creep feeding bovinos
 
Quality Control Tests for Herbal Drugs
Quality Control Tests for Herbal DrugsQuality Control Tests for Herbal Drugs
Quality Control Tests for Herbal Drugs
 
Consenso Nacional de Nutrição Oncológica
Consenso Nacional de Nutrição OncológicaConsenso Nacional de Nutrição Oncológica
Consenso Nacional de Nutrição Oncológica
 
Alimentos e alimentao
Alimentos e alimentaoAlimentos e alimentao
Alimentos e alimentao
 
Cancer de mama completo
Cancer de mama completoCancer de mama completo
Cancer de mama completo
 
Herbal Remedies- Durgashree Diwakar
Herbal Remedies- Durgashree Diwakar Herbal Remedies- Durgashree Diwakar
Herbal Remedies- Durgashree Diwakar
 
DOR EM RECÉM-NASCIDOS: COMO AVALIAR, PREVENIR E TRATAR
DOR EM RECÉM-NASCIDOS: COMO AVALIAR, PREVENIR E TRATARDOR EM RECÉM-NASCIDOS: COMO AVALIAR, PREVENIR E TRATAR
DOR EM RECÉM-NASCIDOS: COMO AVALIAR, PREVENIR E TRATAR
 
CHROMATOGRAPHY-PRINCIPLE, TYPES
CHROMATOGRAPHY-PRINCIPLE, TYPESCHROMATOGRAPHY-PRINCIPLE, TYPES
CHROMATOGRAPHY-PRINCIPLE, TYPES
 
sweetening and coloring agents
sweetening and coloring agentssweetening and coloring agents
sweetening and coloring agents
 
Aleitamento materno.pptx.pdf
Aleitamento materno.pptx.pdfAleitamento materno.pptx.pdf
Aleitamento materno.pptx.pdf
 
BAB I - IV (PEMBUATAN KEJU)
BAB I - IV (PEMBUATAN KEJU)BAB I - IV (PEMBUATAN KEJU)
BAB I - IV (PEMBUATAN KEJU)
 
Alimentação na 1ª infância
Alimentação na 1ª infânciaAlimentação na 1ª infância
Alimentação na 1ª infância
 
Kebijakan Pengawasan Keamanan Pangan - BPOM
Kebijakan Pengawasan Keamanan Pangan - BPOMKebijakan Pengawasan Keamanan Pangan - BPOM
Kebijakan Pengawasan Keamanan Pangan - BPOM
 
Tindak Lanjut PP No. 3/2107 tentang Otoritas Veteriner - Ditkeswan, 16 Maret ...
Tindak Lanjut PP No. 3/2107 tentang Otoritas Veteriner - Ditkeswan, 16 Maret ...Tindak Lanjut PP No. 3/2107 tentang Otoritas Veteriner - Ditkeswan, 16 Maret ...
Tindak Lanjut PP No. 3/2107 tentang Otoritas Veteriner - Ditkeswan, 16 Maret ...
 
Apostila sunicultura basica
Apostila sunicultura basicaApostila sunicultura basica
Apostila sunicultura basica
 
SNI Sapi Potong
SNI Sapi PotongSNI Sapi Potong
SNI Sapi Potong
 

Viewers also liked

Lua 문법 -함수
Lua 문법 -함수Lua 문법 -함수
Lua 문법 -함수
Jaehoon Lee
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동
선협 이
 
Lua script
Lua scriptLua script
Lua script
cancan21st
 
CapitalMarket_Blockchain_PoC_KOSCOM
CapitalMarket_Blockchain_PoC_KOSCOMCapitalMarket_Blockchain_PoC_KOSCOM
CapitalMarket_Blockchain_PoC_KOSCOMMyoungSeok Song
 
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
MinGeun Park
 
블록체인 업계 현황
블록체인 업계 현황블록체인 업계 현황
블록체인 업계 현황
Jeff Paik
 
SXSW 2016 takeaways
SXSW 2016 takeawaysSXSW 2016 takeaways
SXSW 2016 takeaways
Havas
 

Viewers also liked (7)

Lua 문법 -함수
Lua 문법 -함수Lua 문법 -함수
Lua 문법 -함수
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동
 
Lua script
Lua scriptLua script
Lua script
 
CapitalMarket_Blockchain_PoC_KOSCOM
CapitalMarket_Blockchain_PoC_KOSCOMCapitalMarket_Blockchain_PoC_KOSCOM
CapitalMarket_Blockchain_PoC_KOSCOM
 
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
 
블록체인 업계 현황
블록체인 업계 현황블록체인 업계 현황
블록체인 업계 현황
 
SXSW 2016 takeaways
SXSW 2016 takeawaysSXSW 2016 takeaways
SXSW 2016 takeaways
 

Similar to Lua 문법

파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
SeongHyun Ahn
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Jaejin Yun
 
Ruby - 6th (루비 6장 변수와 식)
Ruby - 6th (루비 6장 변수와 식)Ruby - 6th (루비 6장 변수와 식)
Ruby - 6th (루비 6장 변수와 식)재영 이
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
Yoonwhan Lee
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
Taeoh Kim
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
진수 정
 
Java
JavaJava
Java
U.g. Yong
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
Yong Joon Moon
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function
건희 김
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
C수업자료
C수업자료C수업자료
C수업자료
koominsu
 
C수업자료
C수업자료C수업자료
C수업자료koominsu
 
Haskell study 4
Haskell study 4Haskell study 4
Haskell study 4
Nam Hyeonuk
 
[Swift] Operator
[Swift] Operator[Swift] Operator
[Swift] Operator
Bill Kim
 
Shellscript_doc.pdf
Shellscript_doc.pdfShellscript_doc.pdf
Shellscript_doc.pdf
ssuser6d2d9b
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
Han Sung Kim
 
Swift 세미나
Swift 세미나Swift 세미나
Swift 세미나
용재 김
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
Nomota Hiongun KIM
 
R 시작해보기
R 시작해보기R 시작해보기
R 시작해보기
SEUNGWOO LEE
 
RHive tutorial 4: RHive 튜토리얼 4 - UDF, UDTF, UDAF 함수
RHive tutorial 4: RHive 튜토리얼 4 - UDF, UDTF, UDAF 함수RHive tutorial 4: RHive 튜토리얼 4 - UDF, UDTF, UDAF 함수
RHive tutorial 4: RHive 튜토리얼 4 - UDF, UDTF, UDAF 함수
Aiden Seonghak Hong
 

Similar to Lua 문법 (20)

파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버
 
Ruby - 6th (루비 6장 변수와 식)
Ruby - 6th (루비 6장 변수와 식)Ruby - 6th (루비 6장 변수와 식)
Ruby - 6th (루비 6장 변수와 식)
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
 
Java
JavaJava
Java
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
C수업자료
C수업자료C수업자료
C수업자료
 
C수업자료
C수업자료C수업자료
C수업자료
 
Haskell study 4
Haskell study 4Haskell study 4
Haskell study 4
 
[Swift] Operator
[Swift] Operator[Swift] Operator
[Swift] Operator
 
Shellscript_doc.pdf
Shellscript_doc.pdfShellscript_doc.pdf
Shellscript_doc.pdf
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
 
Swift 세미나
Swift 세미나Swift 세미나
Swift 세미나
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
R 시작해보기
R 시작해보기R 시작해보기
R 시작해보기
 
RHive tutorial 4: RHive 튜토리얼 4 - UDF, UDTF, UDAF 함수
RHive tutorial 4: RHive 튜토리얼 4 - UDF, UDTF, UDAF 함수RHive tutorial 4: RHive 튜토리얼 4 - UDF, UDTF, UDAF 함수
RHive tutorial 4: RHive 튜토리얼 4 - UDF, UDTF, UDAF 함수
 

Lua 문법

  • 1. Lua 문법 (1) 연산자, 변수, 문자열, 불 값, 분기문, 반복문 등
  • 2.  사용할 루아 버전은 5.1.4  https://sourceforge.net/projects/luabinaries/files/5.1.4/T ools%20Executables/  lua5_1_4_Win32_bin.zip 또는 lua5_1_4_Win64_bin.zip 다운로드  압축을 푼 폴더의 경로를 윈도 환경 변수에 등록 변수 이름은 LUA_DIR  루아 인터프리터 lua.exe 루아 설치 및 사용 환경 설정
  • 3. 교재는 이 책(2장, 3장, 4장, 7장, 8장)이지만, Lua 5.1을 설명하는 책이면 다른 책으로 공부해도 됩니다.
  • 4.  시스템 쉘(윈도의 경우 시작 메뉴에서 cmd 실행)에서 lua라고 입력해서 루아 인터프리터 실행  프람프트가 > 로 바뀌면서 루아 인터프리터가 사용자의 입력을 기다림  인터프리터는 코드를 입력할 때마다 줄 단위로 실행  잘못된 코드를 입력하면 에러 메시지 출력  문법적 잘못은 없지만 완료되지 않은 코드를 입력하면 프람프트가 >> 로 바뀌면서 새로 입력 받은 내용을 이전 입력의 뒤에 붙여서 해석 루아 인터프리터 lua.exe
  • 5.  더하기 + 빼기 –  곱하기 * 나누기 /  지수 ^  일반적인 수식 계산법에 따른 우선 순위 > print(25 – 2^3 * 3 + 81 / 9) 10  scientific notation: 매우 크거나 작은 수 표현 예) 1.345e14, 5.34e-21  16진수 표현: 숫자 앞에 0x 또는 0X를 붙이면 16진수  정수만 지원 >print(0x1f.ff) 에러 산술연산자
  • 6.  변수명은 알파벳, 숫자, _로만 이루어지며, 알파벳이나 _로만 시작해야 한다.  알파벳 대소문자를 구분한다.  루아 예약어는 변수명으로 사용할 수 없다. 루아 예약어: and, break, do, else, elseif, end, false, for, function, if, in, local, nil, not, or, repeat, return, then, true, until, while  변수의 데이터 타입은 정해져 있지 않다. 예를 들어, 숫자를 저장했던 변수에 문자열을 대입해도 된다. 변수
  • 7.  변수명 = 대입할 값 = 표시 오른쪽에 있는 값을 왼쪽에 있는 변수에 저장  한번에 여러 개의 변수에 값을 대입할 수도 있다. > a, b, c = 1, 2, 3  여러 변수의 값을 서로 바꿀 때도 대입문 한 줄로 처리 > a, b, c = b, c, a > print(a, b, c) 2 3 1 대입
  • 8.  문자열을 표현하는 3가지 표현법이 있다. ① 큰따옴표 “This is a string.” : 문자열 안에 작은따옴표가 있는 경우에 사용 ② 작은따옴표 ‘This is also a string.’ : 문자열 안에 큰따옴표가 있는 경우에 사용 ③ 대괄호 [[This is a long string.]] : 여러 줄로 된 문자열을 쉽게 만들 수 있다. > a = [[abc >> def]] > print(a) 문자열
  • 9.  큰따옴표 문자열이나 작은따옴표 문자열 안에 백슬래시 문자(한글 자판에서 )를 사용해서 특별한 의미를 나타내는 것  큰따옴표 문자열 안에서 큰따옴표 표시법 "  작은따옴표 문자열 안에서 작은따옴표 표시법 '  문자열 안에서 백슬래시 표시법  여러 줄로 된 문자열 표시법 ① long string ② n ③ (newline) 백슬래시 이스케이핑 (Backslash Escaping)
  • 11.  A < B A가 B보다 작으면 true, 아니면 false  A > B A가 B보다 크면 true, 아니면 false  A <= B A가 보다 작거나 같으면 true, 아니면 false  A >= B A가 보다 크거나 같으면 true, 아니면 false  A == B A와 B가 같으면 true, 아니면 false  A ~= B A와 B가 다르면 true, 아니면 false  관계연산자의 피연산자로 문자열을 사용하면, 두 문자열의 서로 다른 첫 번째 문자의 순서를 비교 "abcd" < "abce" true 관계연산자와 불 값
  • 12.  아무 값도 없음을 나타내는 값, 예를 들어, 초기화하지 않은 변수를 print하면 nil 출력  여러 변수 대입문에서 = 왼쪽 변수 개수가 오른쪽 값 개수보다 많으면, 남는 변수에는 nil이 대입됨. > A, B, C, D = 1, 2 > print(A, B, C, D) 1 2 nil nil  값 개수가 더 많으면, 남는 값들은 버림. > A, B = 1, 2, 3, 4 > print(A, B) 1 2 nil 값
  • 13.  루아에서는 false와 nil만 false로 간주한다. 0과 빈 문자열을 false로 간주하는 다른 언어와 다르다.  A and B A의 값이 false 또는 nil이면, A의 값을 결과로 사용, A의 값이 그 외의 값이면, B의 값을 결과로 사용  A or B A의 값이 false 또는 nil이면, B의 값을 결과로 사용, A의 값이 그 외의 값이면, A의 값을 결과로 사용  not A A의 값이 false 또는 nil이면, 결과는 true; 아니면 false 불 연산자 (and, or, not)
  • 14. > B, C = "B was chosen", "C was chosen" > A = true > print(A and B or C) B was chosen > A = false > print(A and B or C) C was chosen [예외] 그러나, B가 false면 A와 관계없이 결과는 C 그러므로, 양자택일로 쓰려면 B가 false, nil이 아니어야 함. A and B or C "A가 true면 B, false면 C" (양자택일)
  • 15.  두 문자열을 연결해서 한 문자열을 만드는 연산자 .. > print("App" .. "le") Apple  문자열에 포함된 문자 개수를 알려주는 연산자 # (띄어쓰기, 문장부호, escape sequence 포함) > print(#"I love you.n") 12 문자열 연결 연산자 .. 문자열 길이 연산자 #
  • 16.  A % B 는 A에 B를 여러 번 더하거나 뺀 결과값이 0 ~ B 사이의 값(0 포함, B 포함하지 않음)이면 그 결과값을 알려준다.  주어진 숫자를 일정한 범위 안에 넣을 때 사용 > print(15%12) > print(-15%12) 3 9 > print(15%-12) > print(-15%-12) -9 -3 모듈로 연산자 %
  • 17.  산술연산자의 피연산자는 숫자(를 저장한 변수)이어야 한다. 그러나, 숫자로만 구성된 문자열이 피연산자로 주어지면 숫자로 자동 변환해서 계산한다. > print("2" + "4") 6  문자열 연결 연산자의 피연산자는 문자열이어야 한다. 그러나, 숫자가 피연산자로 주어지면 문자열로 자동 변환해서 처리한다. > print(11.1 .. -99.4) 11.1-99.4 피연산자의 자동 변환
  • 18.  우선순위: 다른 종류의 연산자가 동시에 사용될 때 어느 연산자를 먼저 적용할 지 결정  결합순서: 우선순위가 동일한 연산자들이 동시에 적용될 때 어떤 순서로 적용할 지 결정  left-associative 연산자: 왼쪽에 있는 연산자부터 적용  right-associative 연산자: 오른쪽에 있는 연산자부터 적용  문자열 연결(..), 지수(^) 연산자를 제외한 대다수 루아 연산자는 left-associative이다.  연산을 ()로 묶으면, 그것부터 적용한다. 2 * 3 – 4 ~= 2 * (3 – 4) 연산자 우선순위(precedence)와 결합순서(associativity)
  • 19. 1. ^ (지수; 오른쪽 결합) 2. not (부정; 단항연산자), - (음수; 단항연산자), # (길이; 단항연산자) 3. * (곱하기), / (나누기), % (모듈로) 4. + (더하기), - (빼기) 5. .. (문자열 연결; 오른쪽 결합) 6. <, >, ~=, <=, ==, >= (관계연산자) 7. and (불 곱하기) 8. or (불 더하기) 루아 연산자 (위에 있는 것이 우선순위가 높다)
  • 20.  한줄 주석: -- 뒤부터 그 줄 끝까지 주석으로 처리 > print("Hello") -- This is a comment.  여러줄 주석: --[[ 뒤부터 ]]가 나올 때까지 주석 처리 > print("Hello") --[[ This is >> a multi-line comment.]]  여러줄 주석은 코드의 일부만 주석 처리할 때 유용 > print(2 + --[[2 +]] 2) 4 주석
  • 21.  여러줄 주석으로 코드의 여러 줄을 가릴 때 다음과 같이 하면, 코드 활성화/비활성화를 – 하나로 할 수 있다. 비활성화된 코드 활성화된 코드 > --[[ > ---[[ >> print("Multiple") > print("Multiple") >> print("lines.") Multiple >> --]] > print("lines.") lines. > --]] 주석 tip
  • 22.  Expression: 값을 가진 것 (예) 34, "string", false, variable, 3+4, #"string", 3>4  Statement: 루아 인터프리터가 실행하는 루아 코드의 최소 단위 (예) 대입문, 함수호출문, if문, while문, for문 등  Compound Statement: 다른 statements를 포함할 수 있는 statement (예) if문, while문, for문, repeat문, do문 Expressions and Statements
  • 23. if expression1 then statements1 elseif expression2 then statements2 else statements3 end elseif 구문과 else 구문은 없을 수도 있다. if 문
  • 24. while expression do statements end expression을 평가해서 false나 nil이 아니면, statements를 실행한다. 실행 후에는 다시 expression을 평가해서 false나 nil이 아니면, statements를 다시 실행한다. expression이 false나 nil이 될 때까지 반복한다. while 반복문
  • 25. for 변수 = 시작 숫자, 끝 숫자, 더할 숫자 do statements end 변수에 시작 숫자를 대입하고, statements를 실행한다. 변수에 더할 숫자를 더하고 결과값이 끝 숫자를 지나치지 않았다면, 다시 statements를 실행한다. 이 과정을 반복하면서 변수값이 끝 숫자를 지나치면 끝낸다. (시작 숫자에 더할 숫자를 아무리 더해도 끝 숫자에 도달하지 못할 경우에는 아예 statements를 실행 안 한다.) for 반복문
  • 26.  시작 숫자, 끝 숫자, 더할 숫자는 expression일 수 있다. 단, expression은 for문이 시작될 때 한번만 평가되고 반복되는 동안 그 값이 계속 사용된다.  대조적으로 while 반복문은 반복할 때마다 조건식인 expression을 매번 평가한다. for 반복문
  • 27. > End = 5 > for I = 1, End do >> End = End - 1 -- The loop doesn’t care that End is >> -- being changed. >> print(“I is “ .. I .. “ and End is “ .. End) >> end I is 1 and End is 4 I is 2 and End is 3 I is 3 and End is 2 I is 4 and End is 1 I is 5 and End is 0
  • 28.  루프 변수(for 바로 뒤에 나오는 변수)의 사용범위는 오직 루프 안이다. > N = “outside” -- 이 예에서 반복문 밖의 변수 N과 > for N = 1, 3 do -- 반복문 안의 변수 N은 다른 변수이다. >> print(N) >> end 1 2 3 > print(N) outside for 반복문
  • 29. repeat statements until expression statements를 실행한 후에 expression의 값을 평가한다. false나 nil이면 statements를 다시 실행하고, false나 nil이 아니면 repeat 반복문을 끝낸다. 즉, expression이 false나 nil이 아닐 때까지 statements를 반복한다. repeat 반복문
  • 30. 1. while은 처음에 조건식을 평가하고 실행여부를 결정하는 반면에, repeat은 처음에 한번 실행하고 조건식을 평가하므로, repeat은 무조건 한번은 실행하게 된다. 2. while은 조건식이 false나 nil이 아닌 동안 실행되지만, repeat은 조건식이 false나 nil인 동안 실행된다. 3. while 반복문은 end로 끝나지만, repeat 반복문에는 end가 없다. while 반복문과 repeat 반복문 비교
  • 31.  break는 반복문(while, for, repeat)을 일찍 끝낸다.  중첩된 반복문에 break가 쓰이면 break가 속한 단계의 반복문만 끝낸다. 상위 단계의 반복문은 계속된다.  break는 사용하기 편리하지만, 디버깅할 때 코드를 이해하기 어렵게 만들 수 있으므로 남용하지 말아야 함. break 문
  • 32.  break는 다음과 같은 두 키워드 사이에 있는 statements 모음인 블록(block)의 마지막 statement이어야 한다.  do, end  repeat, until  then, elseif(또는 else 또는 end)  else, end  그러므로, 디버깅 용도로 블록 중간에 break를 넣기 원할 때에는 do break end를 사용한다. (do 블록) break 문
  • 33. do statements end  일단의 코드를 하나의 블록으로 묶어주는 역할  루아 인터프리터는 do 블록 안의 코드를 한번에 처리  블록은 지역 변수의 사용범위를 정하거나 break의 사용을 제한하는 역할을 한다. (이전 슬라이드 참고) do 문

Editor's Notes

  1. 루아에서 지원하는 데이터 타입은 8개입니다. number, string, boolean, nil, function, table, thread, userdata
  2. 우선순위를 모두 기억하려고 하기보다 많이 쓰이는 것 위주로 기억하고, 우선순위가 애매할 때에는 먼저 적용하기 원하는 연산을 ()로 묶어주는 것이 낫다.
  3. if N == 1 then print(“N is one”) elseif N == 2 then print(“N is two”) elseif N == 3 then print(“N is three”) else print(“N is neither one nor two nor three”) end
  4. Counter = 1 while Counter <= 10 do print(Counter) Counter = Counter + 1 end
  5. 더할 숫자를 생략하면 1로 간주한다. for count = 1, 10 do print(count) end for count = 1, 0 do print(count) end
  6. Counter = 1 repeat print(Counter) Counter = Counter + 1 until Counter > 10
  7. for N = 1, 10 do if N > 5 then break end print(N) end 1 2 3 4 5 > for Outer = 1, 3 do for Inner = 101, 103 do print("Outer: " .. Outer .. "; Inner: " .. Inner) if Inner == 102 then print("Breaking out of inner loop; 103 won’t be reached.") break end end end Outer: 1; Inner: 101 Outer: 1; Inner: 102 Breaking out of inner loop; 103 won’t be reached. Outer: 2; Inner: 101 Outer: 2; Inner: 102 Breaking out of inner loop; 103 won’t be reached. Outer: 3; Inner: 101 Outer: 3; Inner: 102 Breaking out of inner loop; 103 won’t be reached.
  8. while true do break print(“Never reached”) stdin:3: ‘end’ expected (to close ‘while’ at line 1) near ‘print’
  9. do print("\nHere are some numbers:") for N = 1, 5 do print(N) end print("There were some numbers.") end Here are some numbers: 1 2 3 4 5 There were some numbers.