Một toán tử là một ký hiệu để thực hiện một phép toán hoặc đánh giá điều kiện.
Logic
Các toán tử logic trả về giá trị tùy thuộc vào giá trị boolean của các tham số đã cho. Nếu một tham số không phải là false hoặc nil, thì toán tử sẽ đánh giá nó là true. Không giống như nhiều ngôn ngữ khác, Luau coi cả số không và chuỗi rỗng đều là true. Bảng sau tóm tắt cách các toán tử logic hoạt động trong các biểu thức điều kiện.
| Toán tử | Mô tả |
|---|---|
| and | Đánh giá là true chỉ khi cả hai điều kiện đều đúng |
| or | Đánh giá là true nếu một trong hai điều kiện là đúng |
| not | Đánh giá là giá trị ngược lại của điều kiện |
and
Toán tử nhị phân and trả về một trong hai tham số. Nếu tham số đầu tiên đánh giá là true, thì nó trả về tham số thứ hai. Ngược lại, nó trả về tham số đầu tiên.
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
Bạn có thể sử dụng and để kiểm tra nhiều điều kiện trong cấu trúc điều khiển như câu lệnh if và vòng lặp while. Ví dụ, câu lệnh if‑then sau kiểm tra rằng cả hai điều kiện đều đúng:
local pasta = truelocal tomatoSauce = trueif pasta == true and tomatoSauce == true thenprint("Chúng tôi có bữa tối spaghetti")elseprint("Có thứ gì đó bị thiếu...")end-- Output: Chúng tôi có bữa tối spaghetti
or
Toán tử nhị phân or trả về một trong hai tham số. Nếu tham số đầu tiên đánh giá là true, thì nó trả về tham số đầu tiên. Ngược lại, nó trả về tham số thứ hai.
local y = x or 1print(y) -- 1 vì x không tồn tại và do đó là nillocal d = falselocal e = d or 1print(e) -- 1 vì d là falseprint(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
Bạn có thể sử dụng or để thực hiện các bài kiểm tra logic phức tạp trong cấu trúc điều khiển. Ví dụ, câu lệnh if‑then sau kiểm tra xem hai điều kiện có đúng hoặc một điều kiện thứ ba có đúng:
local pasta = falselocal tomatoSauce = truelocal garlicBread = trueif (pasta == true and tomatoSauce == true) or garlicBread == true thenprint("Chúng tôi có bữa tối spaghetti HOẶC bánh mỳ tỏi")elseprint("Có thứ gì đó bị thiếu...")end-- Output: Chúng tôi có bữa tối spaghetti HOẶC bánh mỳ tỏi
not
Toán tử đơn not trả về giá trị boolean ngược lại của tham số. Nếu tham số là false hoặc nil, thì nó trả về true. Ngược lại, nó trả về false.
print(not true) -- falseprint(not false) -- trueprint(not nil) -- trueprint(not "text") -- falseprint(not 0) -- false
Bạn có thể sử dụng toán tử not để kích hoạt một điều kiện hoặc vòng lặp nếu một biến là false hoặc nil.
local nilVariable -- Biến được khai báo nhưng không có giá trị, nên nó là nillocal falseVariable = false -- Biến được khai báo với giá trị falseif not nilVariable thenprint(nilVariable) -- Xuất "nil" vì nil không phải là trueendif not falseVariable thenprint(falseVariable) -- Xuất "false" vì false không phải là trueend
Bạn cũng có thể sử dụng toán tử not để kiểm tra giá trị ngược lại của một câu điều kiện nhiều điều kiện. Trong đoạn mã sau, câu điều kiện if‑then kiểm tra rằng không có trường hợp nào đúng khi ba lớn hơn bốn và năm lớn hơn bốn.
local three = 3local four = 4local five = 5if not (three > four or five < four) thenprint("Ba nhỏ hơn 4 và năm lớn hơn 4.")end-- Output: Ba nhỏ hơn 4 và năm lớn hơn 4.
Quan hệ
Các toán tử quan hệ so sánh hai tham số và trả về một boolean: true hoặc false.
| Toán tử | Mô tả | Ví dụ | Phương thức liên kết |
|---|---|---|---|
| == | Bằng nhau | 3 == 5 → false | __eq |
| ~= | Không bằng nhau | 3 ~= 5 → true | |
| > | Lớn hơn | 3 > 5 → false | |
| < | Nhỏ hơn | 3 < 5 → true | __lt |
| >= | Lớn hơn hoặc bằng | 3 >= 5 → false | |
| <= | Nhỏ hơn hoặc bằng | 3 <= 5 → true | __le |
Số học
Luau hỗ trợ các toán tử nhị phân thông thường cùng với phép lũy thừa, phép chia lấy dư, và phủ định đơn.
| Toán tử | Mô tả | Ví dụ | Phương thức liên kết |
|---|---|---|---|
| + | Phép cộng | 1 + 1 = 2 | __add |
| - | Phép trừ | 1 - 1 = 0 | __sub |
| * | Phép nhân | 5 * 5 = 25 | __mul |
| / | Phép chia | 10 / 5 = 2 | __div |
| // | Phép chia làm tròn | 10 // 4 = 2 | __idiv |
| ^ | Phép lũy thừa | 2 ^ 4 = 16 | __pow |
| % | Phép chia lấy dư | 13 % 7 = 6 | __mod |
| - | Phủ định đơn | -2 = 0 - 2 | __unm |
Gán hợp thành
Bạn có thể sử dụng các toán tử gán hợp thành để đặt một biến bằng kết quả của một phép toán mà tham số đầu tiên là giá trị hiện tại của biến đó.
Phép toán trong một gán hợp thành chỉ xảy ra một lần. Ví dụ, nếu một biểu thức sinh ra một chỉ số ngẫu nhiên trong một bảng, Luau sẽ sử dụng cùng một chỉ số cho cả phép toán và gán.
Trong các ví dụ sau, giả sử local x = 3.
| Toán tử | Phép toán | Ví dụ | Giá trị mới của x |
|---|---|---|---|
| += | Phép cộng | x += 2 | 5 |
| -= | Phép trừ | x -= 2 | 1 |
| *= | Phép nhân | x *= 2 | 6 |
| /= | Phép chia | x /= 2 | 1.5 |
| //= | Phép chia làm tròn | x //= 2 | 1 |
| %= | Phép chia lấy dư | x %= 2 | 1 |
| ^= | Phép lũy thừa | x ^= 2 | 9 |
| ..= | Kết hợp chuỗi | x ..= " World!" | "3 World!" |
Khác
Các toán tử khác bao gồm kết hợp chuỗi và độ dài.
| Toán tử | Mô tả | Ví dụ | Phương thức liên kết |
|---|---|---|---|
| .. | Kết hợp hai chuỗi | print("Xin chào " .. "Thế giới!") | __concat |
| # | Độ dài của bảng | Nếu tableVar = {1, 2, 3}, thì #tableVar == 3. | __len |