Transformando com 'map'
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 10 de 65.
Quando você precisa transformar cada elemento de uma lista em algo novo, o Dart oferece o poderoso método map(). Esse método aplica uma função de transformação a cada elemento da lista e cria uma nova lista contendo todos os resultados transformados.
O método map() recebe uma função como seu parâmetro que define como cada elemento deve ser transformado. Esta função recebe cada elemento da lista original e retorna a versão transformada. O método map() então coleta todos esses valores transformados em uma nova lista.
List<int> numbers = [1, 2, 3, 4, 5];
// Transforma cada número dobrando-o
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)Esta abordagem é muito mais elegante do que criar manualmente uma nova lista e usar um loop para transformar cada elemento. O método map() representa um conceito fundamental na programação funcional, permitindo que você expresse transformações de dados de uma forma clara e concisa.
Desafio
FácilCrie um programa que gerencie um sistema de preços de produtos aplicando ajustes de preço baseados em porcentagem a todos os itens no inventário de uma loja. Seu programa deve:
- Ler uma entrada de string representando o nome da loja
- Ler múltiplas entradas decimais representando os preços originais dos produtos (a entrada terminará quando você receber
-1) - Ler uma entrada decimal representando o ajuste percentual (positivo para aumento de preço, negativo para desconto)
- Usar o método
map()para transformar cada preço aplicando o ajuste percentual - Imprimir os resultados do ajuste de preços no formato exato mostrado abaixo
Por exemplo, se o nome da loja for "Tech Store", os preços forem 99.99, 149.50, 79.99, 199.99, e o ajuste for 15.0 (15% de aumento), seu programa deve exibir:
Store: Tech Store
Original prices: [99.99, 149.5, 79.99, 199.99]
Applying 15.0% adjustment
Adjusted prices: (114.9885, 171.925, 91.9885, 229.9885)
Total items processed: 4
Status: Price adjustment completedSe o nome da loja for "Fashion Outlet", os preços forem 29.99, 45.00, e o ajuste for -20.0 (20% de desconto), seu programa deve exibir:
Store: Fashion Outlet
Original prices: [29.99, 45.0]
Applying -20.0% adjustment
Adjusted prices: (23.992, 36.0)
Total items processed: 2
Status: Price adjustment completedSe o nome da loja for "Book Corner" e apenas um preço 12.50 for fornecido com ajuste 0.0, seu programa deve exibir:
Store: Book Corner
Original prices: [12.5]
Applying 0.0% adjustment
Adjusted prices: (12.5)
Total items processed: 1
Status: Price adjustment completedSeu programa deve usar o método map() com uma função de transformação que calcula o novo preço usando a fórmula: originalPrice * (1 + percentage / 100). O método map() deve retornar um iterável contendo todos os preços ajustados, que serão exibidos no formato entre parênteses.
Folha de consulta
O método map() transforma cada elemento em uma lista aplicando uma função a cada elemento e criando uma nova lista com os resultados.
O método map() recebe uma função como parâmetro que define a transformação. Esta função recebe cada elemento e retorna a versão transformada:
List<int> numbers = [1, 2, 3, 4, 5];
// Transforma cada número dobrando-o
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)Isso é mais elegante do que criar manualmente uma nova lista e usar loops para a transformação.
Experimente você mesmo
import 'dart:io';
void main() {
// Ler o nome da loja
String? storeName = stdin.readLineSync();
// Ler os preços até que -1 seja encontrado
List<double> prices = [];
while (true) {
String? input = stdin.readLineSync();
double price = double.parse(input!);
if (price == -1) {
break;
}
prices.add(price);
}
// Ler o ajuste percentual
String? adjustmentInput = stdin.readLineSync();
double adjustment = double.parse(adjustmentInput!);
// TODO: Escreva seu código abaixo
// Use o método map() para aplicar o ajuste percentual a todos os preços
// Fórmula: originalPrice * (1 + percentage / 100)
// Exibir os resultados
print('Store: $storeName');
print('Original prices: $prices');
print('Applying $adjustment% adjustment');
// Imprimir preços ajustados no formato entre parênteses
// Imprimir o total de itens processados
// Imprimir 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