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 tipo cadena que represente el nombre del edificio
  2. Leer varias entradas de tipo entero que representen las lecturas de los sensores de diferentes pisos (la entrada terminará cuando recibas -1)
  3. Leer una entrada de tipo entero que represente el valor umbral de alerta
  4. Usar el método any() para comprobar si alguna lectura de sensor es mayor o igual que el umbral de alerta
  5. Imprimir los resultados del monitoreo de seguridad con 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 debe 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 debe 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 debe 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 de sensor es mayor o igual que el umbral de alerta. Muestra «Se ha detectado una brecha de seguridad: se requiere una respuesta inmediata» si algún sensor activa la alerta, o «Todos los sistemas funcionan con normalidad: no se detectaron amenazas» si ningún sensor supera el umbral.

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

Practica por tu cuenta: Compilador de Dart online