Menu
Coddy logo textTech

Trasformare con 'map'

Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 10 di 65.

Quando devi trasformare ogni elemento di una lista in qualcosa di nuovo, Dart mette a disposizione il potente metodo map(). Questo metodo applica una funzione di trasformazione a ogni elemento della lista e produce un nuovo Iterable lazy dei risultati trasformati (chiama .toList() per ottenere una lista).

Il metodo map() accetta una funzione come parametro, che definisce come trasformare ogni elemento. Questa funzione riceve ogni elemento dalla lista originale e restituisce la versione trasformata. Il metodo map() raccoglie quindi tutti questi valori trasformati in una nuova lista.

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

// Trasforma ogni numero raddoppiandolo
var doubled = numbers.map((number) => number * 2);
print(doubled);  // (2, 4, 6, 8, 10)

Questo approccio è molto più elegante che creare manualmente una nuova lista e usare un ciclo per trasformare ogni elemento. Il metodo map() rappresenta un concetto fondamentale nella programmazione funzionale, consentendoti di esprimere le trasformazioni dei dati in modo chiaro e conciso.

challenge icon

Sfida

Facile

Crea un programma che gestisca un sistema di determinazione dei prezzi dei prodotti applicando variazioni percentuali ai prezzi di tutti gli articoli presenti nell'inventario di un negozio. Il tuo programma deve:

  1. Leggere una stringa che rappresenta il nome del negozio
  2. Leggere più valori decimali che rappresentano i prezzi originali dei prodotti (l'input terminerà quando riceverai -1)
  3. Leggere un valore decimale che rappresenta la variazione percentuale (positivo per un aumento del prezzo, negativo per uno sconto)
  4. Usare il metodo map() per trasformare ciascun prezzo applicando la variazione percentuale
  5. Stampare i risultati della variazione dei prezzi nel formato esatto mostrato di seguito

Per esempio, se il nome del negozio è "Tech Store", i prezzi sono 99.99, 149.50, 79.99, 199.99 e la variazione è 15.0 (aumento del 15%), il programma dovrebbe produrre:

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 il nome del negozio è "Fashion Outlet", i prezzi sono 29.99, 45.00 e la variazione è -20.0 (sconto del 20%), il programma dovrebbe produrre:

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 il nome del negozio è "Book Corner" e viene fornito un solo prezzo, 12.50, con una variazione di 0.0, il programma dovrebbe produrre:

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

Il programma deve usare il metodo map() con una funzione di trasformazione che calcola il nuovo prezzo usando la formula: originalPrice * (1 + percentage / 100). Il metodo map() dovrebbe restituire un iterabile contenente tutti i prezzi modificati, che verrà visualizzato tra parentesi.

Provalo tu

import 'dart:io';

void main() {
  // Leggi il nome del negozio
  String? storeName = stdin.readLineSync();
  
  // Leggi i prezzi finché non viene incontrato -1
  List<double> prices = [];
  while (true) {
    String? input = stdin.readLineSync();
    double price = double.parse(input!);
    if (price == -1) {
      break;
    }
    prices.add(price);
  }
  
  // Leggi la variazione percentuale
  String? adjustmentInput = stdin.readLineSync();
  double adjustment = double.parse(adjustmentInput!);
  
  // TODO: Scrivi il tuo codice qui sotto
  // Usa il metodo map() per applicare la variazione percentuale a tutti i prezzi
  // Formula: originalPrice * (1 + percentage / 100)
  
  // Visualizza i risultati
  print('Store: $storeName');
  print('Original prices: $prices');
  print('Applying $adjustment% adjustment');
  // Stampa i prezzi modificati tra parentesi
  // Stampa il numero totale di elementi elaborati
  // Stampa il messaggio di stato
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Dart online