Menu
CoddyTech

Kiểm tra điều kiện bằng 'any'

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 13 trên 65.

Đôi khi, bạn cần kiểm tra xem có ít nhất một phần tử trong danh sách đáp ứng một điều kiện cụ thể hay không mà không cần kiểm tra từng phần tử. Phương thức any() giúp bạn làm việc này hiệu quả bằng cách trả về true ngay khi tìm thấy phần tử đầu tiên thỏa mãn điều kiện kiểm tra.

Phương thức any() nhận một hàm kiểm tra trả về true hoặc false cho từng phần tử. Nếu có phần tử nào vượt qua phép kiểm tra, any() lập tức trả về true. Nếu không có phần tử nào vượt qua phép kiểm tra sau khi kiểm tra toàn bộ danh sách, hàm trả về false.

List<double> prices = [15.99, 45.50, 120.00, 8.75];

// Kiểm tra xem có mặt hàng nào có giá hơn $100 không
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem);  // true

Phương thức này đặc biệt hữu ích trong các trường hợp xác thực khi bạn cần biết liệu có ít nhất một mục đáp ứng tiêu chí nhất định hay không. Phương thức any() dừng kiểm tra ngay khi tìm thấy một mục phù hợp, nhờ đó hiệu quả hơn so với việc tự lặp qua toàn bộ danh sách khi bạn chỉ cần biết liệu có mục nào tồn tại hay không.

challenge icon

Thử thách

Dễ

Tạo một chương trình quản lý hệ thống an ninh bằng cách kiểm tra xem có cảm biến nào trong tòa nhà phát hiện hoạt động đáng ngờ hay không. Chương trình của bạn cần:

  1. Đọc một chuỗi đầu vào đại diện cho tên tòa nhà
  2. Đọc nhiều số nguyên đầu vào đại diện cho chỉ số cảm biến ở các tầng khác nhau (đầu vào sẽ kết thúc khi bạn nhận được -1)
  3. Đọc một số nguyên đầu vào đại diện cho ngưỡng cảnh báo
  4. Dùng phương thức any() để kiểm tra xem có chỉ số cảm biến nào lớn hơn hoặc bằng ngưỡng cảnh báo hay không
  5. In kết quả giám sát an ninh theo đúng định dạng bên dưới

Ví dụ, nếu tên tòa nhà là "Office Tower", các chỉ số cảm biến là 15, 23, 8, 45, 12 và ngưỡng cảnh báo là 40, chương trình của bạn sẽ in ra:

Building: Office Tower
Sensor readings: [15, 23, 8, 45, 12]
Alert threshold: 40
Checking for readings >= 40
Alert triggered: true
Status: Security breach detected - immediate response required

Nếu tên tòa nhà là "Shopping Mall", các chỉ số cảm biến là 18, 25, 12, 30 và ngưỡng cảnh báo là 50, chương trình của bạn sẽ in ra:

Building: Shopping Mall
Sensor readings: [18, 25, 12, 30]
Alert threshold: 50
Checking for readings >= 50
Alert triggered: false
Status: All systems normal - no threats detected

Nếu tên tòa nhà là "Warehouse", các chỉ số cảm biến là 75, 82 và ngưỡng cảnh báo là 70, chương trình của bạn sẽ in ra:

Building: Warehouse
Sensor readings: [75, 82]
Alert threshold: 70
Checking for readings >= 70
Alert triggered: true
Status: Security breach detected - immediate response required

Chương trình của bạn phải dùng phương thức any() để kiểm tra xem có chỉ số cảm biến nào lớn hơn hoặc bằng ngưỡng cảnh báo hay không. Hiển thị "Security breach detected - immediate response required" nếu có cảm biến kích hoạt cảnh báo, hoặc "All systems normal - no threats detected" nếu không có cảm biến nào vượt quá ngưỡng.

Tự làm thử

import 'dart:io';

void main() {
  // Đọc tên tòa nhà
  String? buildingName = stdin.readLineSync();
  
  // Đọc các giá trị từ cảm biến cho đến khi gặp -1
  List<int> sensorReadings = [];
  while (true) {
    int reading = int.parse(stdin.readLineSync()!);
    if (reading == -1) {
      break;
    }
    sensorReadings.add(reading);
  }
  
  // Đọc ngưỡng cảnh báo
  int alertThreshold = int.parse(stdin.readLineSync()!);
  
  // TODO: Viết code của bạn bên dưới
  // Dùng phương thức (method) any() để kiểm tra xem có giá trị nào từ cảm biến >= ngưỡng cảnh báo không
  
  // In kết quả theo định dạng yêu cầu
  print('Building: $buildingName');
  print('Sensor readings: $sensorReadings');
  print('Alert threshold: $alertThreshold');
  print('Checking for readings >= $alertThreshold');
  // In kết quả kích hoạt cảnh báo và thông báo trạng thái
}
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