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) -- 5print(nil and 12) -- nilprint(false and 12) -- falseprint(false and true) -- falseprint(false and false) -- falseprint(true and false) -- falseprint(true and true) -- true
and를 사용하여 if 문 및 while 루프와 같은 제어 구조에서 여러 조건을 테스트할 수 있습니다. 예를 들어, 다음 if‑then 문은 두 조건이 모두 참인지 테스트합니다:
local pasta = truelocal tomatoSauce = trueif pasta == true and tomatoSauce == true thenprint("우리는 스파게티 저녁을 가지고 있습니다.")elseprint("뭔가 빠졌습니다...")end-- 출력: 우리는 스파게티 저녁을 가지고 있습니다.
or
이항 연산자 or는 두 인수 중 하나를 반환합니다. 첫 번째 인수가 true로 평가되면 첫 번째 인수를 반환하고, 그렇지 않으면 두 번째 인수를 반환합니다.
local y = x or 1print(y) -- 1, 왜냐하면 x가 존재하지 않기 때문에 nil입니다.local d = falselocal e = d or 1print(e) -- 1, 왜냐하면 d가 false이기 때문입니다.print(4 or 5) -- 4print(nil or 12) -- 12print(false or 12) -- 12print(false or true) -- trueprint(false or false) -- falseprint(true or false) -- trueprint(true or true) -- true
or를 사용하여 제어 구조에서 복잡한 논리 테스트를 수행할 수 있습니다. 예를 들어, 다음 if‑then 문은 두 조건이 모두 참이거나 세 번째 조건이 참인지 테스트합니다:
local pasta = falselocal tomatoSauce = truelocal garlicBread = trueif (pasta == true and tomatoSauce == true) or garlicBread == true thenprint("우리는 스파게티 저녁 또는 마늘빵을 가지고 있습니다.")elseprint("뭔가 빠졌습니다...")end-- 출력: 우리는 스파게티 저녁 또는 마늘빵을 가지고 있습니다.
not
단항 연산자 not은 인수의 반대 불린 값을 반환합니다. 인수가 false 또는 nil일 경우, true를 반환합니다. 그렇지 않으면 false를 반환합니다.
print(not true) -- falseprint(not false) -- trueprint(not nil) -- trueprint(not "text") -- falseprint(not 0) -- false
not 연산자를 사용하여 변수가 false 또는 nil일 경우에 조건문이나 루프를 트리거할 수 있습니다.
local nilVariable -- 변수는 선언되었지만 값이 없어서 nil입니다.local falseVariable = false -- 변수는 false 값을 가지고 선언됩니다.if not nilVariable thenprint(nilVariable) -- "nil"을 출력합니다, 왜냐하면 nil은 true가 아니기 때문입니다.endif not falseVariable thenprint(falseVariable) -- "false"를 출력합니다, 왜냐하면 false는 true가 아니기 때문입니다.end
또한 not 연산자를 사용하여 전체 다중 조건 표현식의 반대를 테스트할 수 있습니다. 다음 코드 샘플에서, if‑then 조건문은 세가 네보다 크거나 다섯이 네보다 크지 않음을 검사합니다.
local three = 3local four = 4local five = 5if not (three > four or five < four) thenprint("세는 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 |