Menu
Coddy logo textTech

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);  // true

Este 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.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de seguridad comprobando si algún sensor de un edificio ha detectado actividad sospechosa. Tu programa debe:

  1. Leer una entrada de cadena que represente el nombre del edificio
  2. Leer múltiples entradas de enteros que representen las lecturas de los sensores de diferentes pisos (la entrada terminará cuando recibas -1)
  3. Leer una entrada de entero que represente el valor del umbral de alerta
  4. Usar el método any() para comprobar si alguna lectura del sensor es mayor o igual al umbral de alerta
  5. 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 required

Si 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 detected

Si 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 required

Tu 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);  // true

El 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
}
quiz iconPonte a prueba

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