Menu
Coddy logo textTech

Verificando Condições com 'any'

Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 13 de 65.

Às vezes, você precisa verificar se pelo menos um elemento em uma lista atende a uma condição específica, sem ter que examinar cada elemento individualmente. O método any() fornece uma maneira eficiente de fazer isso, retornando true assim que encontra o primeiro elemento que satisfaz sua condição de teste.

O método any() recebe uma função de teste que retorna true ou false para cada elemento. Se qualquer elemento passar no teste, any() retorna imediatamente true. Se nenhum elemento passar no teste após verificar a lista inteira, ele retorna false.

List<double> prices = [15.99, 45.50, 120.00, 8.75];

// Verifica se algum item custa mais de $100
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem);  // true

Este método é particularmente útil para cenários de validação onde você precisa saber se pelo menos um item atende a certos critérios. O método any() interrompe a verificação assim que encontra uma correspondência, tornando-o mais eficiente do que percorrer manualmente toda a lista quando você só precisa saber se algo existe.

challenge icon

Desafio

Fácil

Crie um programa que gerencie um sistema de segurança verificando se algum sensor em um edifício detectou atividade suspeita. Seu programa deve:

  1. Ler uma entrada de string representando o nome do edifício
  2. Ler múltiplas entradas de inteiros representando as leituras dos sensores de diferentes andares (a entrada terminará quando você receber -1)
  3. Ler uma entrada de inteiro representando o valor do limite de alerta (alert threshold)
  4. Usar o método any() para verificar se alguma leitura do sensor é maior ou igual ao limite de alerta
  5. Imprimir os resultados do monitoramento de segurança no formato exato mostrado abaixo

Por exemplo, se o nome do edifício for "Office Tower", as leituras dos sensores forem 15, 23, 8, 45, 12, e o limite de alerta for 40, seu programa deve exibir:

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

Se o nome do edifício for "Shopping Mall", as leituras dos sensores forem 18, 25, 12, 30, e o limite de alerta for 50, seu programa deve exibir:

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

Se o nome do edifício for "Warehouse", as leituras dos sensores forem 75, 82, e o limite de alerta for 70, seu programa deve exibir:

Building: Warehouse
Sensor readings: [75, 82]
Alert threshold: 70
Checking for readings >= 70
Alert triggered: true
Status: Security breach detected - immediate response required

Seu programa deve usar o método any() para verificar se alguma leitura do sensor é maior ou igual ao limite de alerta. Exiba "Security breach detected - immediate response required" se algum sensor disparar o alerta, ou "All systems normal - no threats detected" se nenhum sensor exceder o limite.

Folha de consulta

O método any() verifica se pelo menos um elemento em uma lista atende a uma condição específica. Ele retorna true assim que encontra o primeiro elemento que satisfaz a condição de teste, ou false se nenhum elemento passar no teste.

List<double> prices = [15.99, 45.50, 120.00, 8.75];

// Verifica se algum item custa mais de $100
bool hasExpensiveItem = prices.any((price) => price > 100);
print(hasExpensiveItem);  // true

O método any() é eficiente porque interrompe a verificação assim que encontra uma correspondência, tornando-o ideal para cenários de validação onde você só precisa saber se algo existe.

Experimente você mesmo

import 'dart:io';

void main() {
  // Ler o nome do edifício
  String? buildingName = stdin.readLineSync();
  
  // Ler as leituras do sensor até que -1 seja encontrado
  List<int> sensorReadings = [];
  while (true) {
    int reading = int.parse(stdin.readLineSync()!);
    if (reading == -1) {
      break;
    }
    sensorReadings.add(reading);
  }
  
  // Ler o limite de alerta
  int alertThreshold = int.parse(stdin.readLineSync()!);
  
  // TODO: Escreva seu código abaixo
  // Use o método any() para verificar se alguma leitura do sensor é >= ao limite de alerta
  
  // Imprimir os resultados no formato exigido
  print('Building: $buildingName');
  print('Sensor readings: $sensorReadings');
  print('Alert threshold: $alertThreshold');
  print('Checking for readings >= $alertThreshold');
  // Imprimir o resultado do alerta disparado e a mensagem de status
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo