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.
Défi
FacileCré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 :
- Lire une chaîne de caractères en entrée représentant le nom du magasin
- Lire plusieurs entrées décimales représentant les prix d'origine des produits (la saisie se termine lorsque vous recevez
-1) - Lire une entrée décimale représentant l'ajustement en pourcentage (positif pour une augmentation de prix, négatif pour une remise)
- Utiliser la méthode
map()pour transformer chaque prix en appliquant l'ajustement en pourcentage - 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 completedSi 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 completedSi 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 completedVotre 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
}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
1Manipulation avancée des listes
Propriétés de liste : first & lastÉtat de la liste : isEmpty & isNotEmptyInverser une listeAjouter à une liste : insertSuppression dans une liste : removeWhereRechercher dans une liste : indexOfTrier une listeMélanger une listeRécapitulatif - Organisateur de liste4Manipulation avancée des Maps
Itérer sur une MapVérifier les clés et les valeursPropriétés de Map : keys & valuesAjout conditionnel : putIfAbsentSupprimer des entrées d'une MapMaps imbriquéesRécapitulatif - Mise à jour de l'inventaire2Opérations fonctionnelles sur les listes
Transformer avec 'map'Filtrer avec 'where'Utiliser '.toList()'Vérifier des conditions avec 'any'Conditions avec 'every'Trouver avec 'firstWhere'Récapitulatif - Filtrage de données3Les Ensembles
Qu'est-ce qu'un ensemble ?Créer un ensembleAjouter et supprimer des éléments d'un ensembleVérifier la présence d'éléments dans un ensembleConvertir une liste en ensembleUnion d'ensemblesIntersection d'ensemblesDifférence d'ensemblesRécapitulatif - Liste d'invités uniques