Menu
Coddy logo textTech

Transformar con 'map'

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 10 de 65.

Cuando necesites transformar cada elemento de una lista en algo nuevo, Dart proporciona el potente método map(). Este método aplica una función de transformación a cada elemento de la lista y crea una nueva lista que contiene todos los resultados transformados.

El método map() toma una función como parámetro que define cómo debe transformarse cada elemento. Esta función recibe cada elemento de la lista original y devuelve la versión transformada. El método map() luego recopila todos estos valores transformados en una nueva lista.

List<int> numbers = [1, 2, 3, 4, 5];

// Transforma cada número duplicándolo
var doubled = numbers.map((number) => number * 2);
print(doubled);  // (2, 4, 6, 8, 10)

Este enfoque es mucho más elegante que crear manualmente una nueva lista y usar un bucle para transformar cada elemento. El método map() representa un concepto fundamental en la programación funcional, permitiéndote expresar transformaciones de datos de una manera clara y concisa.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de precios de productos aplicando ajustes de precio basados en porcentajes a todos los artículos del inventario de una tienda. Tu programa debe:

  1. Leer una entrada de cadena que represente el nombre de la tienda
  2. Leer múltiples entradas decimales que representen los precios originales de los productos (la entrada terminará cuando recibas -1)
  3. Leer una entrada decimal que represente el ajuste porcentual (positivo para aumento de precio, negativo para descuento)
  4. Usar el método map() para transformar cada precio aplicando el ajuste porcentual
  5. Imprimir los resultados del ajuste de precios en el formato exacto que se muestra a continuación

Por ejemplo, si el nombre de la tienda es "Tech Store", los precios son 99.99, 149.50, 79.99, 199.99, y el ajuste es 15.0 (15% de aumento), tu programa debería mostrar:

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

Si el nombre de la tienda es "Fashion Outlet", los precios son 29.99, 45.00, y el ajuste es -20.0 (20% de descuento), tu programa debería mostrar:

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

Si el nombre de la tienda es "Book Corner" y solo se proporciona un precio 12.50 con un ajuste de 0.0, tu programa debería mostrar:

Store: Book Corner
Original prices: [12.5]
Applying 0.0% adjustment
Adjusted prices: (12.5)
Total items processed: 1
Status: Price adjustment completed

Tu programa debe usar el método map() con una función de transformación que calcule el nuevo precio usando la fórmula: originalPrice * (1 + percentage / 100). El método map() debe devolver un iterable que contenga todos los precios ajustados, los cuales se mostrarán en formato de paréntesis.

Hoja de referencia

El método map() transforma cada elemento de una lista aplicando una función a cada elemento y creando una nueva lista con los resultados.

El método map() toma una función como parámetro que define la transformación. Esta función recibe cada elemento y devuelve la versión transformada:

List<int> numbers = [1, 2, 3, 4, 5];

// Transforma cada número duplicándolo
var doubled = numbers.map((number) => number * 2);
print(doubled);  // (2, 4, 6, 8, 10)

Esto es más elegante que crear manualmente una nueva lista y usar bucles para la transformación.

Pruébalo tú mismo

import 'dart:io';

void main() {
  // Leer el nombre de la tienda
  String? storeName = stdin.readLineSync();
  
  // Leer precios hasta que se encuentre -1
  List<double> prices = [];
  while (true) {
    String? input = stdin.readLineSync();
    double price = double.parse(input!);
    if (price == -1) {
      break;
    }
    prices.add(price);
  }
  
  // Leer el porcentaje de ajuste
  String? adjustmentInput = stdin.readLineSync();
  double adjustment = double.parse(adjustmentInput!);
  
  // TODO: Escribe tu código a continuación
  // Usa el método map() para aplicar el ajuste porcentual a todos los precios
  // Fórmula: originalPrice * (1 + percentage / 100)
  
  // Mostrar los resultados
  print('Store: $storeName');
  print('Original prices: $prices');
  print('Applying $adjustment% adjustment');
  // Imprimir los precios ajustados en formato de paréntesis
  // Imprimir el total de artículos procesados
  // Imprimir 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