Menu
CoddyTech

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) lambda

Bạ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.

challenge icon

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:

  1. Tạo một biểu thức lambda in ra Hello from Lambda!
  2. Lưu lambda này vào một biến bằng từ khóa auto
  3. Gọi hàm lambda để thực thi nó
  4. Tạo biểu thức lambda thứ hai in ra Lambda executed successfully!
  5. 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;
}
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch C++ online