Giới thiệu về biểu thức lambda
Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 42 trên 56.
Biểu thức lambda là một tính năng mạnh mẽ của C++, cho phép bạn tạo các hàm nhỏ, không tên ngay tại nơi cần dùng. Hãy xem chúng như những hàm nhỏ mà bạn có thể định nghĩa và sử dụng mà không cần viết phần khai báo hàm riêng.
Cú pháp cơ bản của biểu thức lambda theo mẫu sau: [](){}. Dấu ngoặc vuông [] được gọi là mệnh đề capture, dấu ngoặc đơn () chứa các tham số (giống như hàm thông thường), còn dấu ngoặc nhọn {} chứa phần thân hàm.
Mệnh đề capture kiểm soát những biến nào trong phạm vi xung quanh mà lambda có thể sử dụng. Các dạng phổ biến nhất là:
[=]: capture tất cả biến cục bộ theo giá trị (lambda có bản sao riêng)[&]: capture tất cả biến cục bộ theo tham chiếu (lambda truy cập các biến gốc)[]: không capture gì (lambda không thể sử dụng bất kỳ biến nào bên ngoài)Đây là cách tạo và gọi một lambda đơn giản:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Gọi hàm (function) lambdaBạn cũng có thể định nghĩa và thực thi ngay một lambda mà không cần lưu vào biến:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Biểu thức lambda đặc biệt hữu ích cho những hàm ngắn, chỉ dùng một lần mà bạn không muốn định nghĩa riêng. Chúng giúp đoạn code ngắn gọn hơn và giữ các phần logic liên quan ở gần nhau.
Thử thách
DễTạo một chương trình minh họa cú pháp cơ bản và cách thực thi biểu thức lambda. Thử thách này sẽ kiểm tra mức độ hiểu biết của bạn về cách định nghĩa và gọi các hàm lambda đơn giản không có tham số.
Chương trình của bạn cần:
- Tạo một biểu thức lambda in ra
Hello from Lambda! - Lưu lambda này vào một biến bằng từ khóa
auto - Gọi hàm lambda để thực thi nó
- Tạo biểu thức lambda thứ hai in ra
Lambda executed successfully! - Thực thi lambda thứ hai ngay lập tức mà không lưu vào biến
Dùng định dạng đầu ra chính xác sau:
Hello from Lambda!
Lambda executed successfully!Hãy nhớ rằng biểu thức lambda dùng cú pháp [](){}, trong đó dấu ngoặc vuông [] là mệnh đề capture, dấu ngoặc đơn () chứa các tham số (để trống trong thử thách này), còn dấu ngoặc nhọn {} chứa phần thân hàm. Bạn có thể lưu lambda vào một biến bằng cách dùng auto variableName = [](){...};, sau đó gọi nó bằng variableName();. Để thực thi ngay lập tức, bạn có thể dùng cú pháp [](){...}();, cú pháp này định nghĩa và gọi lambda trong một câu lệnh.
Tự làm thử
#include <iostream>
using namespace std;
int main() {
// TODO: Viết code của bạn bên dưới
// Tạo biểu thức lambda in ra "Hello from Lambda!"
// Lưu biểu thức đó vào một biến bằng từ khóa auto
// Gọi hàm lambda
// Tạo lambda thứ hai in ra "Lambda executed successfully!"
// Chạy lambda đó ngay mà không lưu vào biến
return 0;
}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
1Con trỏ và bộ nhớ
Con trỏ là gì?Toán tử lấy địa chỉToán tử giải tham chiếuCon trỏ nullCon trỏ và mảngBộ nhớ động với newGiải phóng bộ nhớ với deleteÔn tập: luyện tập về con trỏ4Ánh xạ (cặp khóa-giá trị)
Giới thiệu std::mapTạo ánh xạTruy cập và chỉnh sửa giá trịKiểm tra khóaXóa các cặpDuyệt qua ánh xạÔn tập: tần suất từ7Hàm nâng cao
Truyền tham chiếuGiới thiệu về biểu thức lambdaLambda với tham sốLambda với giá trị trả vềGiới thiệu về đệ quyGiai thừa đệ quySắp xếp bằng lambda2Vector (mảng động)
Giới thiệu std::vectorTạo vectorThêm phần tửTruy cập phần tửKích thước vectorDuyệt bằng vòng lặp forVòng lặp for dựa trên phạm viXóa phần tửÔn tập: các thao tác với vector5Dự án: Công cụ quản lý hàng tồn kho
Thiết lập dự ánThêm và cập nhật mặt hàng3Dự án: Công cụ danh sách công việc
Tổng quan dự ánThêm công việc6Tập hợp (các phần tử duy nhất)
Giới thiệu std::setTạo tập hợp và thêm phần tửKiểm tra phần tửXóa phần tửDuyệt qua tập hợpÔn tập: các số duy nhấtTự luyện tập: Trình biên dịch C++ online