Menu
Coddy logo textTech

Transformer avec 'map'

Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 10 sur 65.

Lorsque vous avez besoin de transformer chaque élément d'une liste en quelque chose de nouveau, Dart propose la puissante méthode map(). Cette méthode applique une fonction de transformation à chaque élément de la liste et crée une nouvelle liste contenant tous les résultats transformés.

La méthode map() prend une fonction comme paramètre qui définit comment chaque élément doit être transformé. Cette fonction reçoit chaque élément de la liste d'origine et renvoie la version transformée. La méthode map() collecte ensuite toutes ces valeurs transformées dans une nouvelle liste.

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

// Transformer chaque nombre en le doublant
var doubled = numbers.map((number) => number * 2);
print(doubled);  // (2, 4, 6, 8, 10)

Cette approche est bien plus élégante que de créer manuellement une nouvelle liste et d'utiliser une boucle pour transformer chaque élément. La méthode map() représente un concept fondamental de la programmation fonctionnelle, vous permettant d'exprimer des transformations de données de manière claire et concise.

challenge icon

Défi

Facile

Créez un programme qui gère un système de tarification de produits en appliquant des ajustements de prix basés sur un pourcentage à tous les articles de l'inventaire d'un magasin. Votre programme doit :

  1. Lire une chaîne de caractères en entrée représentant le nom du magasin
  2. Lire plusieurs entrées décimales représentant les prix d'origine des produits (la saisie se termine lorsque vous recevez -1)
  3. Lire une entrée décimale représentant l'ajustement en pourcentage (positif pour une augmentation de prix, négatif pour une remise)
  4. Utiliser la méthode map() pour transformer chaque prix en appliquant l'ajustement en pourcentage
  5. Afficher les résultats de l'ajustement des prix exactement dans le format indiqué ci-dessous

Par exemple, si le nom du magasin est "Tech Store", que les prix sont 99.99, 149.50, 79.99, 199.99, et que l'ajustement est 15.0 (augmentation de 15 %), votre programme doit afficher :

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 le nom du magasin est "Fashion Outlet", que les prix sont 29.99, 45.00, et que l'ajustement est -20.0 (remise de 20 %), votre programme doit afficher :

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 le nom du magasin est "Book Corner" et qu'un seul prix 12.50 est fourni avec un ajustement de 0.0, votre programme doit afficher :

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

Votre programme doit utiliser la méthode map() avec une fonction de transformation qui calcule le nouveau prix à l'aide de la formule : originalPrice * (1 + percentage / 100). La méthode map() doit retourner un itérable contenant tous les prix ajustés, qui seront affichés au format entre parenthèses.

Aide-mémoire

La méthode map() transforme chaque élément d'une liste en appliquant une fonction à chaque élément et en créant une nouvelle liste avec les résultats.

La méthode map() prend une fonction en paramètre qui définit la transformation. Cette fonction reçoit chaque élément et retourne la version transformée :

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

// Transformer chaque nombre en le doublant
var doubled = numbers.map((number) => number * 2);
print(doubled);  // (2, 4, 6, 8, 10)

C'est plus élégant que de créer manuellement une nouvelle liste et d'utiliser des boucles pour la transformation.

Essayez vous-même

import 'dart:io';

void main() {
  // Lire le nom du magasin
  String? storeName = stdin.readLineSync();
  
  // Lire les prix jusqu'à ce que -1 soit rencontré
  List<double> prices = [];
  while (true) {
    String? input = stdin.readLineSync();
    double price = double.parse(input!);
    if (price == -1) {
      break;
    }
    prices.add(price);
  }
  
  // Lire l'ajustement en pourcentage
  String? adjustmentInput = stdin.readLineSync();
  double adjustment = double.parse(adjustmentInput!);
  
  // TODO: Écrivez votre code ci-dessous
  // Utiliser la méthode map() pour appliquer l'ajustement en pourcentage à tous les prix
  // Formule : originalPrice * (1 + percentage / 100)
  
  // Afficher les résultats
  print('Store: $storeName');
  print('Original prices: $prices');
  print('Applying $adjustment% adjustment');
  // Afficher les prix ajustés au format entre parenthèses
  // Afficher le nombre total d'articles traités
  // Afficher le message de statut
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux