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); // truePhươ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.
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:
- Đọc một chuỗi đầu vào đại diện cho tên tòa nhà
- Đọ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) - Đọc một số nguyên đầu vào đại diện cho ngưỡng cảnh báo
- 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 - 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 requiredNế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 detectedNế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 requiredChươ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
}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
1Thao tác nâng cao với danh sách
Thuộc tính danh sách: đầu và cuốiTrạng thái danh sách: isEmpty và isNotEmpĐảo ngược danh sáchThêm vào danh sách: insertXóa khỏi danh sách: removeWhereTìm trong danh sách: indexOfSắp xếp danh sáchXáo trộn danh sáchÔn tập: trình sắp xếp danh sách4Thao tác nâng cao với Map
Duyệt qua MapKiểm tra khóa và giá trịCác thuộc tính của Map: khóa và giá trịThêm có điều kiện: putIfAbsentXóa mục khỏi MapMap lồng nhauÔn tập: Cập nhật kho hàng2Thao tác hàm trên danh sách
Biến đổi bằng 'map'Lọc bằng 'where'Dùng '.toList()'Kiểm tra điều kiện bằng 'any'Điều kiện với 'every'Tìm phần tử bằng 'firstWhere'Ôn tập: lọc dữ liệu5Dự án: Tính tiền giỏ hàng
Thiết lập dự ánThêm mặt hàng vào giỏ8Dự án: Trình phân tích văn bản đơn giản
Tổng quan và thiết lập dự ánĐếm ký tự3Tập hợp
Tập hợp là gì?Tạo tập hợpThêm và xóa phần tử khỏi tập hợpKiểm tra phần tử trong tập hợpChuyển danh sách thành tập hợpPhép hợp của các tập hợpPhép giao của các tập hợpPhép hiệu của các tập hợpÔn tập: danh sách khách mời không trùng lặpTự luyện tập: Trình biên dịch Dart online