Các loại biểu thức và toán tử trong ngôn ngữ Lua

Lua hỗ trợ đầy đủ các phép toán số học cơ bản bao gồm: + (cộng), - (trừ), * (nhân), / (chia), ^ (lũy thừa), % (lấy phần dư), và toán tử một ngôi - (đổi dấu). Tất cả các phép toán này đều hoạt động với số thực. Ví dụ: val^0.5 tính căn bậc hai của val, còn val^3 tính val mũ 3.

Các toán tử quan hệ trong Lua gồm: <, >, <=, >=, ==, ~=. Kết quả trả về luôn là true hoặc false.

Toán tử == kiểm tra bằng nhau, còn ~= kiểm tra khác nhau. Chúng có thể áp dụng cho bất kỳ giá trị nào. Nếu hai giá trị có kiểu dữ liệu khác nhau, Lua xem chúng là không bằng nhau. Đặc biệt, nil chỉ bằng chính nó.

Đối với bảng (table), userdata và hàm, Lua thực hiện so sánh tham chiếu. Hai giá trị chỉ được coi là bằng nhau khi chúng trỏ đến cùng một đối tượng trong bộ nhớ.

Ba toán tử logic chính là and, or và not. Giống như trong câu lệnh điều kiện, Lua xem false và nil là giá trị sai, còn lại tất cả đều là đúng. Toán tử and trả về toán hạng thứ hai nếu toán hạng đầu tiên là đúng, ngược lại trả về toán hạng đầu tiên. Toán tử or trả về toán hạng đầu tiên nếu nó là đúng, ngược lại trả về toán hạng thứ hai. Điều này khác với nhiều ngôn ngữ khác vì Lua trả về chính giá trị toán hạng chứ không phải true/false.

function kiem_tra_logic()
  local a, b = 7, 8
  local ket_qua_and = (a > 5) and (b < 10)
  local ket_qua_or = (a == 0) or (b / a > 1)
  
  print("Kết quả AND:", ket_qua_and)  --> true
  print("Kết quả OR:", ket_qua_or)    --> true
  
  local x, y = nil, 15
  print(x and y)  --> nil
  print(x or y)   --> 15
  
  local m, n = false, 20
  print(m and n)  --> false
  print(m or n)   --> 20
end

kiem_tra_logic()

Cả and và or đều sử dụng cơ chế đánh giá ngắn mạch - chỉ tính toán toán hạng thứ hai khi thực sự cần thiết.

Để nối chuỗi trong Lua, dùng toán tử .. (hai dấu chấm). Nếu một trong hai toán hạng là số, Lua tự động chuyển nó thành chuỗi. Chuỗi trong Lua là bất biến, phép nối tạo ra chuỗi mới chứ không thay đổi giá trị gốc.

Biểu thức tạo bảng (table constructor) dùng để khởi tạo bảng. Cách đơn giản nhất là {} tạo bảng rỗng. Có thể khởi tạo mảng với chỉ số bắt đầu từ 1:

local danh_sach_thang = {"Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6"}
print(danh_sach_thang[1])  --> Tháng 1
print(danh_sach_thang[3])  --> Tháng 3
print(danh_sach_thang[6])  --> Tháng 6

Lua hỗ trợ cú pháp đặc biệt để khởi tạo bảng với khóa chuỗi:

local diem_toa_do = {x = 100, y = 200, z = 50}
print(diem_toa_do.x)      --> 100
print(diem_toa_do["y"])   --> 200

Cách viết tổng quát hơn cho phép dùng biểu thức trong dấu ngoặc vuông để xác định khóa:

local phep_tinh = {
  ["cong"] = "Phép cộng",
  ["tru"] = "Phép trừ",
  ["nhan"] = "Phép nhân",
  [10] = "Số mười",
  [true] = "Giá trị đúng"
}
print(phep_tinh["cong"])  --> Phép cộng
print(phep_tinh[10])      --> Số mười

Cú pháp {x = 10, y = 20} thực chất tương đương với {["x"] = 10, ["y"] = 20}. Trong thực tế, bạn có thể dùng hai cách này thay thế cho nhau tùy ý.

Thẻ: lua lua-operators lua-expressions lua-table lua-logical-operators

Đăng vào ngày 28 tháng 9 lúc 06:58