Bảng với hàm
Thuộc phần Lập trình hướng đối tượng trong hành trình Lua của Coddy. Bài học 1 trên 70.
Trong Lua, bảng rất linh hoạt. Ngoài việc lưu trữ dữ liệu, bảng còn có thể chứa các hàm (function). Nhờ đó, bạn có thể nhóm các thao tác liên quan lại với nhau, giúp code gọn gàng và dễ quản lý.
Để đặt một hàm trong bảng, bạn chỉ cần gán hàm đó cho một khóa như bất kỳ giá trị nào khác:
local myTable = {
greet = function(name)
return "Hello, " .. name
end
}
print(myTable.greet("Alice")) -- Đầu ra: Hello, AliceBạn cũng có thể định nghĩa hàm riêng, sau đó thêm hàm vào bảng:
local myTable = {}
myTable.greet = function(name)
return "Hello, " .. name
endHoặc dùng cú pháp viết tắt gọn hơn này:
local myTable = {}
function myTable.greet(name)
return "Hello, " .. name
endCả ba cách đều cho ra cùng một kết quả. Bạn gọi hàm bằng ký hiệu chấm: myTable.greet("Alice"). Cách gộp hàm với dữ liệu này là nền tảng của lập trình hướng đối tượng trong Lua.
Thử thách
DễTạo một bảng tên là calculator, chứa bốn hàm số học:
add(a, b)trả về tổng củaavàbsubtract(a, b)trả vềatrừbmultiply(a, b)trả về tích củaavàbdivide(a, b)trả vềachia chob
Bạn sẽ nhận ba đầu vào:
- Tên phép toán (một trong các tên sau:
add,subtract,multiply,divide) - Số thứ nhất
- Số thứ hai
Gọi hàm phù hợp từ bảng calculator dựa trên tên phép toán và in ra kết quả.
Tự làm thử
-- Đọc các đầu vào
local operation = io.read()
local num1 = tonumber(io.read())
local num2 = tonumber(io.read())
-- TODO: Tạo bảng calculator với bốn hàm (function):
-- add(a, b), subtract(a, b), multiply(a, b), divide(a, b)
-- TODO: Dùng tên phép tính để gọi hàm phù hợp trong bảng calculator
-- và in ra kết quảBài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Khái niệm “self”
Bảng với hàm“self” tường minhCú pháp dấu hai chấmDấu chấm và dấu hai chấmÔn tập: Điểm chuyển động4Dự án: Ngân hàng số
Thiết lập dự ánPhương thức nạp tiền2Mẫu Prototype cho lớp
Khái niệm PrototypeLiên kết bằng __indexHàm khởi tạo :new()Khởi tạo thuộc tínhCác instance độc lậpÔn tập: Nhà máy ô tô5Nạp chồng toán tử trong OOP
Cộng các đối tượngTrừ các đối tượngNối các đối tượngSo sánh các đối tượng (<, >)Ôn tập: phép tính với ví tiền8Đóng gói
Quy ước đặt tênClosure để bảo mậtTruy cập qua closureBảng chỉ đọcLogic kiểm tra hợp lệTổng kết: Két an toàn11Mẫu thiết kế (cơ bản)
Hàm tạo đối tượngBảng SingletonMẫu IteratorObserver (Listener)Ôn tập: Factory Logger3Trạng thái và hành vi của đối tượng
Biến instancePhương thức getterPhương thức setterThuộc tính tính toánĐịnh dạng chuỗiKiểm tra tính bằng nhauÔn tập: điểm số học sinh6Cơ bản về kế thừa
Thiết lập kế thừaKế thừa phương thứcMở rộng hàm khởi tạoThêm phương thức cho lớp conDùng chung và riêngÔn tập: hệ phân cấp hình dạngTự luyện tập: Trình biên dịch Lua online