Menu
CoddyTech

Cheat sheet Lua

Cập nhật lần cuối

Hello World và chạy code

Lua rất tối giản: chỉ một câu lệnh là chạy được.

Thao tácCú pháp
In ra một dòngprint("Hello, World!")
In nhiều giá trịprint("x", 1, true)
Ghi không xuống dòngio.write("Hi")
Chú thích-- this is a comment
Chú thích nhiều dòng--[[ ... ]]
Nối chuỗiprint("Hi " .. name)
Chạy một tệplua app.lua
Shell tương táclua

Biến và kiểu dữ liệu

Mặc định biến là toàn cục; khai báo biến cục bộ bằng local.

Thao tácCú pháp
Biến cục bộlocal age = 30
Biến toàn cụccount = 0
Gán nhiều biến cùng lúclocal a, b = 1, 2
Tám kiểu dữ liệunil, boolean, number, string, table, function, userdata, thread
Nil / booleannil, true, false
Kiểm tra kiểutype(x) trả về "number"
Chuyển sang sốtonumber("42")
Chuyển sang chuỗitostring(42)

Chuỗi

Chuỗi là bất biến; dùng nháy đơn hay nháy kép đều được.

Thao tácCú pháp
Độ dài#s hoặc string.len(s)
Nối chuỗis1 .. s2
Chữ hoa / chữ thườngs:upper(), s:lower()
Chuỗi cons:sub(1, 3)
Tìm chuỗi cons:find("ell")
Thay thế (gsub)s:gsub("a", "b")
Định dạngstring.format("%05d", 42)
Chuỗi dài[[ multi\nline ]]

Table (cấu trúc dữ liệu cốt lõi)

Table là kiểu có cấu trúc duy nhất của Lua: nó đóng vai trò mảng, map và đối tượng.

Thao tácCú pháp
Table rỗnglocal t = {}
Kiểu mảng (chỉ số bắt đầu từ 1)local t = {10, 20, 30}
Truy cập phần tử mảngt[1] (phần tử đầu tiên)
Table kiểu maplocal u = {name = "Ada", age = 30}
Truy cập giá trị trong mapu.name hoặc u["name"]
Gán giá trịt[4] = 40, u.email = "a@x.com"
Độ dài phần mảng#t
Duyệt mảng (ipairs)for i, v in ipairs(t) do ... end
Duyệt mọi khóa (pairs)for k, v in pairs(u) do ... end
Table lồng nhaulocal m = {a = {1, 2}}

Luồng điều khiển

Khối lệnh kết thúc bằng end; chỉ nil và false được coi là sai.

Thao tácCú pháp
If / elseif / elseif x > 0 then ... elseif x < 0 then ... else ... end
Toán tử logicand, or, not
Vòng lặp for theo sốfor i = 1, 10 do ... end
Vòng lặp for có bước nhảyfor i = 10, 1, -1 do ... end
Vòng lặp whilewhile x < 100 do ... end
Repeat-untilrepeat ... until done
Breakbreak
Toán tử khácif a ~= b then ... end

Hàm

Hàm là giá trị hạng nhất (first-class) và có thể trả về nhiều kết quả.

Thao tácCú pháp
Định nghĩa hàmfunction add(a, b) return a + b end
Hàm cục bộlocal function square(x) return x * x end
Hàm ẩn danhlocal f = function(x) return x * 2 end
Trả về nhiều giá trịfunction bounds() return 1, 10 end
Nhận nhiều giá trị trả vềlocal lo, hi = bounds()
Hàm nhận số lượng đối số tùy ýfunction sum(...) ... end
Gom các đối số vararglocal args = {...}
Phương thức (cú pháp dấu hai chấm)function obj:greet() ... end

Thư viện string

Các hàm thường dùng trong thư viện string (gọi được theo kiểu s:fn()).

HàmTác dụng
string.len(s)Độ dài chuỗi
string.sub(s, i, j)Chuỗi con từ chỉ số i đến j
string.upper(s)Bản sao viết hoa
string.rep(s, n)Lặp lại chuỗi n lần
string.find(s, p)Tìm mẫu, trả về vị trí đầu/cuối
string.match(s, p)Trả về kết quả khớp mẫu đầu tiên
string.gsub(s, p, r)Thay thế mọi kết quả khớp mẫu
string.format(fmt, ...)Định dạng các giá trị thành chuỗi

Thư viện table và math

Các hàm hỗ trợ làm việc với table kiểu mảng và với số.

HàmTác dụng
table.insert(t, v)Thêm giá trị vào cuối
table.insert(t, i, v)Chèn v vào vị trí i
table.remove(t, i)Xóa và trả về phần tử ở vị trí i
table.concat(t, ", ")Nối các phần tử thành chuỗi
table.sort(t)Sắp xếp mảng tại chỗ
math.floor(x) / math.ceil(x)Làm tròn xuống / lên
math.max(...) / math.min(...)Đối số lớn nhất / nhỏ nhất
math.random(1, 6)Số nguyên ngẫu nhiên trong một khoảng

Metatable (tóm tắt)

Metatable cho phép bạn tùy chỉnh cách table hoạt động: toán tử, truy cập chỉ số và nhiều hơn nữa.

Thao tácCú pháp
Gán metatablesetmetatable(t, mt)
Lấy metatablegetmetatable(t)
Giá trị dự phòng cho khóa không tồn tạimt.__index = defaults
Giá trị mặc định qua hàmmt.__index = function(t, k) ... end
Tùy chỉnh phép cộngmt.__add = function(a, b) ... end
Tùy chỉnh tostringmt.__tostring = function(t) ... end
OOP dựa trên prototypemt.__index = ClassTable

Những cú pháp Lua bạn dùng nhiều nhất, gói gọn trong một trang. Cheat sheet Lua này là bảng tra cứu nhanh phần cốt lõi của ngôn ngữ: biến và kiểu dữ liệu, chuỗi, luồng điều khiển, hàm, và table, cấu trúc dữ liệu duy nhất và linh hoạt của Lua, kèm phần giới thiệu nhanh về thư viện chuẩn và metatable.

Mọi thứ ở đây đều là Lua chuẩn và chạy được trên trình thông dịch mặc định. Sao chép đoạn bạn cần, hoặc chạy thử từng đoạn code ngay trong playground Lua, không cần cài đặt.

Câu hỏi thường gặp về cheat sheet Lua

Cheat sheet Lua này có miễn phí không?

Có. Cheat sheet Lua này hoàn toàn miễn phí và không cần đăng ký. Lưu trang lại và quay lại bất cứ khi nào bạn cần tra một thao tác với table, một hàm xử lý chuỗi hay một từ khóa điều khiển luồng.

Vì sao table trong Lua vừa là mảng vừa là map?
Table chỉ là một tập các cặp khóa và giá trị, và khóa có thể là bất kỳ giá trị nào. Khi bạn dùng các khóa số nguyên liên tiếp bắt đầu từ 1 ({10, 20, 30}), table hoạt động như mảng; khi dùng khóa là chuỗi ({name = "Ada"}), nó hoạt động như map. Bạn thậm chí có thể dùng cả hai trong cùng một table. Vì vậy Lua chỉ cần một kiểu có cấu trúc: table đảm nhận cả mảng, từ điển, tập hợp và đối tượng.
Vì sao chỉ số trong Lua bắt đầu từ 1?
Theo quy ước và thiết kế, mảng trong Lua bắt đầu từ chỉ số 1 chứ không phải 0, nên t[1] là phần tử đầu tiên và #t là số phần tử. Toán tử độ dài # và các hàm thư viện như table.insert hay ipairs đều dựa trên quy ước bắt đầu từ 1 này, nên tuân theo nó giúp code xử lý mảng của bạn chạy đúng như mong đợi.
Có thể luyện tập Lua online không?

Có. Mở playground Lua để chạy bất kỳ đoạn code nào trong cheat sheet này ngay trên trình duyệt, không cần cài Lua. Khi muốn học có lộ trình, khóa học Lua tương tác miễn phí của Coddy dẫn bạn từng bước từ biến và table đến hàm và metatable.

Cheat sheet này có phù hợp cho người mới bắt đầu không?

Có. Nội dung được sắp xếp từ các chủ đề phổ biến nhất (biến, chuỗi, table, luồng điều khiển) đến các chủ đề nâng cao (thư viện chuẩn và metatable), nên ngay ngày đầu bạn đã dùng được các phần trên cùng, rồi dần làm chủ phần còn lại.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học Lua cùng Coddy

Bắt đầu