Hàm ẩn danh
Thuộc phần Logic và luồng chương trình trong hành trình Lua của Coddy. Bài học 13 trên 54.
Giờ đây, khi đã hiểu hàm (function) có thể được lưu trong biến và truyền qua lại, bạn có thể viết hàm ngắn gọn hơn nữa. Thay vì luôn đặt tên cho hàm, bạn có thể tạo hàm ngay tại nơi cần dùng. Những hàm này được gọi là hàm ẩn danh.
Hàm ẩn danh là hàm không có tên. Bạn định nghĩa hàm này bằng từ khóa function, theo sau ngay là các tham số và phần thân hàm:
function(a, b)
return a + b
endCách này tạo ra một giá trị hàm có thể dùng ngay. Hàm ẩn danh đặc biệt hữu ích khi truyền hàm làm đối số cho các hàm khác. Bạn còn nhớ ví dụ sắp xếp tùy chỉnh ở phần trước không? Đây là cách viết ví dụ đó bằng hàm ẩn danh:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Thay vì định nghĩa một hàm có tên riêng để so sánh, hàm được tạo trực tiếp làm đối số thứ hai cho table.sort(). Cách này giúp đoạn code gọn hơn và giữ logic sắp xếp ngay tại nơi sử dụng.
Thử thách
DễViết một hàm filterByThreshold nhận numbers và threshold, rồi trả về một bảng mới chỉ chứa các số lớn hơn ngưỡng.
Trình soạn thảo đã có hàm hỗ trợ filter(list, keep): hàm này gọi keep(value) với từng giá trị và trả về một bảng mới chứa các giá trị mà keep trả về true. Hãy gọi filter và truyền điều kiện kiểm tra dưới dạng một hàm ẩn danh, viết trực tiếp trong lời gọi, giống như cách bài học truyền một hàm vào table.sort(). Đừng lưu điều kiện kiểm tra vào một biến hoặc đặt tên cho hàm đó.
Tham số:
numbers(bảng): Một bảng kiểu danh sách chứa các giá trị sốthreshold(số): Giá trị tối thiểu, không bao gồm giá trị này, để lọc
Giá trị trả về: Một bảng chỉ chứa các số lớn hơn ngưỡng (bảng)
Tự làm thử
local function filter(list, keep)
local result = {}
for _, value in ipairs(list) do
if keep(value) then
table.insert(result, value)
end
end
return result
end
function filterByThreshold(numbers, threshold)
-- Viết code ở đây
end
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 Logic và luồng chương trình
2Các hàm khác của thư viện table
table.concat()Tạo table và unpack()table.sort()Sắp xếp tùy chỉnh bằng hàmÔn tập: Bảng điểm cao5Dự án: Bộ máy trò chơi phiêu lưu bằng văn bản
Thiết lập dự án: Căn phòngLiên kết các phòng3Các khái niệm nâng cao về hàm
Trả về nhiều giá trịHàm nhận số lượng đối số linh hoạt (...)Hàm là giá trị hạng nhấtHàm ẩn danhClosure là gì?Ôn tập: bộ xử lý sự kiện đơn giảnTự luyện tập: Trình biên dịch Lua online