Vérifier des conditions avec 'any'
Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 13 sur 65.
Parfois, vous devez vérifier si au moins un élément d'une liste remplit une condition spécifique, sans avoir à examiner chaque élément. La méthode any() offre un moyen efficace de le faire en renvoyant true dès qu'elle trouve le premier élément qui satisfait votre condition de test.
La méthode any() prend une fonction de test qui renvoie true ou false pour chaque élément. Si un élément réussit le test, any() renvoie immédiatement true. Si aucun élément ne réussit le test après avoir vérifié toute la liste, elle renvoie false.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// Vérifier si un article coûte plus de 100 $
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueCette méthode est particulièrement utile pour les scénarios de validation où vous devez savoir si au moins un élément répond à certains critères. La méthode any() arrête la vérification dès qu'elle trouve une correspondance, ce qui la rend plus efficace que de parcourir manuellement toute la liste lorsque vous avez seulement besoin de savoir si quelque chose existe.
Défi
FacileCréez un programme qui gère un système de sécurité en vérifiant si un capteur dans un bâtiment a détecté une activité suspecte. Votre programme doit :
- Lire une chaîne de caractères en entrée représentant le nom du bâtiment
- Lire plusieurs entiers en entrée représentant les relevés des capteurs de différents étages (la saisie se termine lorsque vous recevez
-1) - Lire un entier en entrée représentant la valeur du seuil d'alerte
- Utiliser la méthode
any()pour vérifier si un relevé de capteur est supérieur ou égal au seuil d'alerte - Afficher les résultats de la surveillance de sécurité dans le format exact indiqué ci-dessous
Par exemple, si le nom du bâtiment est "Office Tower", que les relevés des capteurs sont 15, 23, 8, 45, 12, et que le seuil d'alerte est 40, votre programme doit afficher :
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 requiredSi le nom du bâtiment est "Shopping Mall", que les relevés des capteurs sont 18, 25, 12, 30, et que le seuil d'alerte est 50, votre programme doit afficher :
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 detectedSi le nom du bâtiment est "Warehouse", que les relevés des capteurs sont 75, 82, et que le seuil d'alerte est 70, votre programme doit afficher :
Building: Warehouse
Sensor readings: [75, 82]
Alert threshold: 70
Checking for readings >= 70
Alert triggered: true
Status: Security breach detected - immediate response requiredVotre programme doit utiliser la méthode any() pour vérifier si un relevé de capteur est supérieur ou égal au seuil d'alerte. Affichez "Security breach detected - immediate response required" si un capteur déclenche l'alerte, ou "All systems normal - no threats detected" si aucun capteur ne dépasse le seuil.
Aide-mémoire
La méthode any() vérifie si au moins un élément d'une liste remplit une condition spécifique. Elle renvoie true dès qu'elle trouve le premier élément qui satisfait la condition de test, ou false si aucun élément ne réussit le test.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// Check if any item costs more than $100
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueLa méthode any() est efficace car elle arrête la vérification dès qu'elle trouve une correspondance, ce qui la rend idéale pour les scénarios de validation où vous avez seulement besoin de savoir si quelque chose existe.
Essayez vous-même
import 'dart:io';
void main() {
// Lire le nom du bâtiment
String? buildingName = stdin.readLineSync();
// Lire les relevés des capteurs jusqu'à ce que -1 soit rencontré
List<int> sensorReadings = [];
while (true) {
int reading = int.parse(stdin.readLineSync()!);
if (reading == -1) {
break;
}
sensorReadings.add(reading);
}
// Lire le seuil d'alerte
int alertThreshold = int.parse(stdin.readLineSync()!);
// TODO: Écrivez votre code ci-dessous
// Utilisez la méthode any() pour vérifier si un relevé de capteur est >= au seuil d'alerte
// Afficher les résultats au format requis
print('Building: $buildingName');
print('Sensor readings: $sensorReadings');
print('Alert threshold: $alertThreshold');
print('Checking for readings >= $alertThreshold');
// Afficher le résultat du déclenchement de l'alerte et le message de statut
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Manipulation avancée des listes
Propriétés de liste : first & lastÉtat de la liste : isEmpty & isNotEmptyInverser une listeAjouter à une liste : insertSuppression dans une liste : removeWhereRechercher dans une liste : indexOfTrier une listeMélanger une listeRécapitulatif - Organisateur de liste4Manipulation avancée des Maps
Itérer sur une MapVérifier les clés et les valeursPropriétés de Map : keys & valuesAjout conditionnel : putIfAbsentSupprimer des entrées d'une MapMaps imbriquéesRécapitulatif - Mise à jour de l'inventaire2Opérations fonctionnelles sur les listes
Transformer avec 'map'Filtrer avec 'where'Utiliser '.toList()'Vérifier des conditions avec 'any'Conditions avec 'every'Trouver avec 'firstWhere'Récapitulatif - Filtrage de données3Les Ensembles
Qu'est-ce qu'un ensemble ?Créer un ensembleAjouter et supprimer des éléments d'un ensembleVérifier la présence d'éléments dans un ensembleConvertir une liste en ensembleUnion d'ensemblesIntersection d'ensemblesDifférence d'ensemblesRécapitulatif - Liste d'invités uniques