Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Crie 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:

  1. Ler uma entrada de string representando o nome da loja
  2. Ler múltiplas entradas decimais representando os preços originais dos produtos (a entrada terminará quando você receber -1)
  3. Ler uma entrada decimal representando o ajuste percentual (positivo para aumento de preço, negativo para desconto)
  4. Usar o método map() para transformar cada preço aplicando o ajuste percentual
  5. 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 completed

Se 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 completed

Se 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 completed

Seu 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
}
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