Menu
CoddyTech

Hàm ẩn danh

Thuộc phần Logic và luồng điều khiển trong hành trình Dart của Coddy. Bài học 44 trên 65.

Đến nay, bạn đã tạo các hàm với tên như calculateTotal hoặc printMessage. Nhưng đôi khi bạn chỉ cần một hàm đơn giản cho một nhiệm vụ cụ thể, và việc đặt tên cho hàm đó có vẻ không cần thiết. Đây là lúc hàm ẩn danh (anonymous function) phát huy tác dụng.

Hàm ẩn danh (anonymous function) là hàm không có tên. Bạn định nghĩa hàm ngay tại nơi cần dùng, giúp đoạn code ngắn gọn hơn khi thực hiện các thao tác ngắn và chỉ dùng một lần. Cú pháp rất đơn giản: bạn chỉ cần viết danh sách tham số, sau đó là phần thân hàm:

(parameter) {
  // thân hàm
}

Các hàm ẩn danh đặc biệt hữu ích khi dùng với các phương thức của danh sách. Ví dụ, thay vì tạo một hàm có tên riêng để in ra từng phần tử trong danh sách, bạn có thể dùng trực tiếp một hàm ẩn danh với phương thức forEach:

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit) {
  print(fruit);
});

Cách làm này giúp code của bạn gọn gàng và tập trung, đặc biệt khi logic của hàm (function) đơn giản và sẽ không được dùng lại ở nơi khác trong chương trình.

challenge icon

Thử thách

Dễ

Tạo một chương trình xử lý danh sách tên nhân viên bằng các hàm ẩn danh. Chương trình sẽ minh họa cách dùng phương thức forEach với hàm ẩn danh để thực hiện các thao tác khác nhau trên từng phần tử trong danh sách.

  1. Đọc chuỗi đầu vào chứa tên nhân viên, các tên được phân tách bằng dấu phẩy (ví dụ: "Alice,Bob,Charlie,Diana")
  2. Tách chuỗi đầu vào thành danh sách các tên riêng lẻ bằng phương thức split()
  3. Dùng phương thức forEach với một hàm ẩn danh để in ra tên từng nhân viên cùng lời chào mừng
  4. Dùng phương thức forEach với một hàm ẩn danh khác để in ra tên từng nhân viên bằng chữ in hoa
  5. Dùng phương thức forEach với hàm ẩn danh thứ ba để in ra tên từng nhân viên cùng số lượng ký tự trong tên

Ví dụ, nếu đầu vào là "Alice,Bob,Charlie", chương trình của bạn sẽ cho kết quả:

Processing employee list: Alice,Bob,Charlie
===========================================
Welcome Messages:
Welcome to the team, Alice!
Welcome to the team, Bob!
Welcome to the team, Charlie!
===========================================
Names in Uppercase:
ALICE
BOB
CHARLIE
===========================================
Name Lengths:
Alice has 5 characters
Bob has 3 characters
Charlie has 7 characters

Nếu đầu vào là "John,Sarah", chương trình của bạn sẽ cho kết quả:

Processing employee list: John,Sarah
===========================================
Welcome Messages:
Welcome to the team, John!
Welcome to the team, Sarah!
===========================================
Names in Uppercase:
JOHN
SARAH
===========================================
Name Lengths:
John has 4 characters
Sarah has 5 characters

Chương trình phải dùng ba lời gọi phương thức forEach riêng biệt, mỗi lời gọi có một hàm ẩn danh riêng. Hãy định nghĩa các hàm ẩn danh ngay tại chỗ, không đặt tên cho chúng. Mỗi hàm ẩn danh cần nhận một tham số đại diện cho tên nhân viên hiện tại và thực hiện thao tác được yêu cầu. Dùng nội suy chuỗi để định dạng các thông báo đầu ra chính xác như trên.

Tự làm thử

import 'dart:io';

void main() {
  // Đọc chuỗi (string) đầu vào chứa tên nhân viên
  String? input = stdin.readLineSync();
  
  // Tách đầu vào thành danh sách (list) tên
  List<String> employeeNames = input!.split(',');
  
  // In ra thông báo bắt đầu xử lý
  print('Processing employee list: $input');
  print('===========================================');
  
  // TODO: Viết code của bạn bên dưới
  // Dùng forEach với các hàm (function) ẩn danh để:
  // 1. In ra lời chào
  // 2. In ra tên bằng chữ in hoa  
  // 3. In ra độ dài của tên
  
}
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 điều khiển

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