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); // trueEste 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.
Desafio
FácilCrie um programa que gerencie um sistema de segurança verificando se algum sensor em um edifício detectou atividade suspeita. Seu programa deve:
- Ler uma entrada de string representando o nome do edifício
- Ler múltiplas entradas de inteiros representando as leituras dos sensores de diferentes andares (a entrada terminará quando você receber
-1) - Ler uma entrada de inteiro representando o valor do limite de alerta (alert threshold)
- Usar o método
any()para verificar se alguma leitura do sensor é maior ou igual ao limite de alerta - 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 requiredSe 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 detectedSe 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 requiredSeu 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); // trueO 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
}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
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos