An operator is a symbol for performing an operation or conditional evaluation.
논리적
논리 연산자는 주어진 인수의 불린 값에 따라 값을 반환합니다. 인수가 false 또는 nil이 아닐 경우, 연산자는 이를 true로 평가합니다. 다른 많은 언어와 달리, Luau는 0과 빈 문자열을 모두 true로 간주합니다. 다음 표는 논리 연산자가 조건문에서 어떻게 작동하는지를 요약합니다.
| 연산자 | 설명 |
|---|---|
| and | 두 조건이 모두 참일 경우에만 true로 평가됩니다. |
| or | 어느 한 조건이 참일 경우 true로 평가됩니다. |
| not | 조건의 반대로 평가됩니다. |
and
이항 연산자 and는 두 인수 중 하나를 반환합니다. 첫 번째 인수가 true로 평가되면 두 번째 인수를 반환하고, 그렇지 않으면 첫 번째 인수를 반환합니다.
print(4 and 5) -- 5
print(nil and 12) -- nil
print(false and 12) -- false
print(false and true) -- false
print(false and false) -- false
print(true and false) -- false
print(true and true) -- trueand를 사용하여 if 문 및 while 루프와 같은 제어 구조에서 여러 조건을 테스트할 수 있습니다. 예를 들어, 다음 if‑then 문은 두 조건이 모두 참인지 테스트합니다:
local pasta = true
local tomatoSauce = true
if pasta == true and tomatoSauce == true then
print("우리는 스파게티 저녁을 가지고 있습니다.")
else
print("뭔가 빠졌습니다...")
end
-- 출력: 우리는 스파게티 저녁을 가지고 있습니다.or
이항 연산자 or는 두 인수 중 하나를 반환합니다. 첫 번째 인수가 true로 평가되면 첫 번째 인수를 반환하고, 그렇지 않으면 두 번째 인수를 반환합니다.
local y = x or 1
print(y) -- 1, 왜냐하면 x가 존재하지 않기 때문에 nil입니다.
local d = false
local e = d or 1
print(e) -- 1, 왜냐하면 d가 false이기 때문입니다.
print(4 or 5) -- 4
print(nil or 12) -- 12
print(false or 12) -- 12
print(false or true) -- true
print(false or false) -- false
print(true or false) -- true
print(true or true) -- trueor를 사용하여 제어 구조에서 복잡한 논리 테스트를 수행할 수 있습니다. 예를 들어, 다음 if‑then 문은 두 조건이 모두 참이거나 세 번째 조건이 참인지 테스트합니다:
local pasta = false
local tomatoSauce = true
local garlicBread = true
if (pasta == true and tomatoSauce == true) or garlicBread == true then
print("우리는 스파게티 저녁 또는 마늘빵을 가지고 있습니다.")
else
print("뭔가 빠졌습니다...")
end
-- 출력: 우리는 스파게티 저녁 또는 마늘빵을 가지고 있습니다.not
단항 연산자 not은 인수의 반대 불린 값을 반환합니다. 인수가 false 또는 nil일 경우, true를 반환합니다. 그렇지 않으면 false를 반환합니다.
print(not true) -- false
print(not false) -- true
print(not nil) -- true
print(not "text") -- false
print(not 0) -- falsenot 연산자를 사용하여 변수가 false 또는 nil일 경우에 조건문이나 루프를 트리거할 수 있습니다.
local nilVariable -- 변수는 선언되었지만 값이 없어서 nil입니다.
local falseVariable = false -- 변수는 false 값을 가지고 선언됩니다.
if not nilVariable then
print(nilVariable) -- "nil"을 출력합니다, 왜냐하면 nil은 true가 아니기 때문입니다.
end
if not falseVariable then
print(falseVariable) -- "false"를 출력합니다, 왜냐하면 false는 true가 아니기 때문입니다.
end또한 not 연산자를 사용하여 전체 다중 조건 표현식의 반대를 테스트할 수 있습니다. 다음 코드 샘플에서, if‑then 조건문은 세가 네보다 크거나 다섯이 네보다 크지 않음을 검사합니다.
local three = 3
local four = 4
local five = 5
if not (three > four or five < four) then
print("세는 4보다 작고 다섯은 4보다 큽니다.")
end
-- 출력: 세는 4보다 작고 다섯은 4보다 큽니다.관계형
관계형 연산자는 두 매개변수를 비교하고 boolean: true 또는 false를 반환합니다.
| 연산자 | 설명 | 예 | 관련 메타 메서드 |
|---|---|---|---|
| == | 같음 | 3 == 5 → false | __eq |
| ~= | 같지 않음 | 3 ~= 5 → true | |
| > | 초과 | 3 > 5 → false | |
| < | 미만 | 3 < 5 → true | __lt |
| >= | 이상 | 3 >= 5 → false | |
| <= | 이하 | 3 <= 5 → true | __le |
산술
Luau는 일반적인 이항 연산자와 함께 거듭제곱, 나머지, 단항 부정을 지원합니다.
| 연산자 | 설명 | 예 | 관련 메타 메서드 |
|---|---|---|---|
| + | 덧셈 | 1 + 1 = 2 | __add |
| - | 뺄셈 | 1 - 1 = 0 | __sub |
| * | 곱셈 | 5 * 5 = 25 | __mul |
| / | 나누기 | 10 / 5 = 2 | __div |
| // | 내림 나누기 | 10 // 4 = 2 | __idiv |
| ^ | 거듭제곱 | 2 ^ 4 = 16 | __pow |
| % | 나머지 | 13 % 7 = 6 | __mod |
| - | 단항 부정 | -2 = 0 - 2 | __unm |
복합 할당
복합 할당 연산자를 사용하면 변수의 현재 값을 연산의 결과로 설정할 수 있습니다.
복합 할당에서 연산은 한 번 발생합니다. 예를 들어, 표현식이 테이블에서 임의의 인덱스를 생성하면, Luau는 연산과 할당 모두에 동일한 인덱스를 사용합니다.
다음 예시에서 local x = 3이라고 가정합니다.
| 연산자 | 연산 | 예 | x의 새로운 값 |
|---|---|---|---|
| += | 덧셈 | x += 2 | 5 |
| -= | 뺄셈 | x -= 2 | 1 |
| *= | 곱셈 | x *= 2 | 6 |
| /= | 나누기 | x /= 2 | 1.5 |
| //= | 내림 나누기 | x //= 2 | 1 |
| %= | 나머지 | x %= 2 | 1 |
| ^= | 거듭제곱 | x ^= 2 | 9 |
| ..= | 연결 | x ..= " World!" | "3 World!" |
기타
기타 연산자에는 연결 및 길이가 포함됩니다.
| 연산자 | 설명 | 예 | 관련 메타 메서드 |
|---|---|---|---|
| .. | 두 문자열을 연결합니다. | print("안녕하세요 " .. "세계!") | __concat |
| # | 테이블의 길이 | tableVar = {1, 2, 3}일 경우, #tableVar == 3입니다. | __len |