Comprobar condiciones con 'any'
Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 13 de 65.
A veces necesitas comprobar si al menos un elemento de una lista cumple una condición específica, sin tener que examinar cada uno de los elementos. El método any() proporciona una forma eficiente de hacerlo, devolviendo true tan pronto como encuentra el primer elemento que satisface tu condición de prueba.
El método any() toma una función de prueba que devuelve true o false para cada elemento. Si algún elemento pasa la prueba, any() devuelve inmediatamente true. Si ningún elemento pasa la prueba después de revisar la lista completa, devuelve false.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// Comprobar si algún artículo cuesta más de $100
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueEste método es particularmente útil para escenarios de validación donde necesitas saber si al menos un elemento cumple con ciertos criterios. El método any() deja de buscar tan pronto como encuentra una coincidencia, lo que lo hace más eficiente que recorrer manualmente toda la lista cuando solo necesitas saber si algo existe.
Desafío
FácilCrea un programa que gestione un sistema de seguridad comprobando si algún sensor de un edificio ha detectado actividad sospechosa. Tu programa debe:
- Leer una entrada de cadena que represente el nombre del edificio
- Leer múltiples entradas de enteros que representen las lecturas de los sensores de diferentes pisos (la entrada terminará cuando recibas
-1) - Leer una entrada de entero que represente el valor del umbral de alerta
- Usar el método
any()para comprobar si alguna lectura del sensor es mayor o igual al umbral de alerta - Imprimir los resultados del monitoreo de seguridad en el formato exacto que se muestra a continuación
Por ejemplo, si el nombre del edificio es "Office Tower", las lecturas de los sensores son 15, 23, 8, 45, 12, y el umbral de alerta es 40, tu programa debería mostrar:
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 el nombre del edificio es "Shopping Mall", las lecturas de los sensores son 18, 25, 12, 30, y el umbral de alerta es 50, tu programa debería mostrar:
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 el nombre del edificio es "Warehouse", las lecturas de los sensores son 75, 82, y el umbral de alerta es 70, tu programa debería mostrar:
Building: Warehouse
Sensor readings: [75, 82]
Alert threshold: 70
Checking for readings >= 70
Alert triggered: true
Status: Security breach detected - immediate response requiredTu programa debe usar el método any() para comprobar si alguna lectura del sensor es mayor o igual al umbral de alerta. Muestra "Security breach detected - immediate response required" si algún sensor activa la alerta, o "All systems normal - no threats detected" si ningún sensor supera el umbral.
Hoja de referencia
El método any() comprueba si al menos un elemento de una lista cumple una condición específica. Devuelve true tan pronto como encuentra el primer elemento que satisface la condición de prueba, o false si ningún elemento supera la prueba.
List<double> prices = [15.99, 45.50, 120.00, 8.75];
// Comprobar si algún artículo cuesta más de $100
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem); // trueEl método any() es eficiente porque deja de comprobar tan pronto como encuentra una coincidencia, lo que lo hace ideal para escenarios de validación donde solo necesitas saber si algo existe.
Pruébalo tú mismo
import 'dart:io';
void main() {
// Leer el nombre del edificio
String? buildingName = stdin.readLineSync();
// Leer las lecturas del sensor hasta que se encuentre -1
List<int> sensorReadings = [];
while (true) {
int reading = int.parse(stdin.readLineSync()!);
if (reading == -1) {
break;
}
sensorReadings.add(reading);
}
// Leer el umbral de alerta
int alertThreshold = int.parse(stdin.readLineSync()!);
// TODO: Escribe tu código a continuación
// Usa el método any() para verificar si alguna lectura del sensor es >= al umbral de alerta
// Imprimir los resultados en el formato requerido
print('Building: $buildingName');
print('Sensor readings: $sensorReadings');
print('Alert threshold: $alertThreshold');
print('Checking for readings >= $alertThreshold');
// Imprimir el resultado de la alerta activada y el mensaje de estado
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Manipulación avanzada de listas
Propiedades de listas: first y lastEstado de la lista: isEmpty y isNotEmptyInvertir una listaAñadir a una lista: insertEliminación en listas: removeWhereBúsqueda en una lista: indexOfOrdenar una listaMezclar una listaResumen - Organizador de listas4Manipulación avanzada de mapas
Iterar sobre un mapaComprobación de claves y valoresPropiedades del mapa: keys y valuesAdición condicional: putIfAbsentEliminar entradas de un mapaMapas anidadosResumen - Actualización de inventario2Operaciones funcionales con listas
Transformar con 'map'Filtrar con 'where'Uso de '.toList()'Comprobar condiciones con 'any'Condiciones con 'every'Búsqueda con 'firstWhere'Resumen - Filtrado de datos5Proyecto: Calculadora de carrito de compras
Configuración del proyectoAgregar artículos al carrito3Conjuntos
¿Qué es un Conjunto?Crear un ConjuntoAñadir y eliminar elementos de un ConjuntoComprobar elementos en un ConjuntoConvertir una lista en un ConjuntoUnión de ConjuntosIntersección de ConjuntosDiferencia de ConjuntosResumen - Lista de invitados única