'map' ile Dönüştürme
Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası — ders 10 / 65.
Bir listedeki her öğeyi yeni bir şeye dönüştürmeniz gerektiğinde, Dart güçlü map() metodunu sunar. Bu metod, listedeki her bir öğeye bir dönüşüm fonksiyonu uygular ve dönüştürülen sonuçlardan oluşan yeni bir tembel (lazy) Iterable üretir (bir liste elde etmek için .toList() metodunu çağırın).
map() metodu, her bir öğenin nasıl dönüştürüleceğini tanımlayan bir fonksiyonu parametre olarak alır. Bu fonksiyon, orijinal listedeki her bir öğeyi alır ve dönüştürülmüş versiyonunu döndürür. map() metodu daha sonra tüm bu dönüştürülmüş değerleri yeni bir listede toplar.
List<int> numbers = [1, 2, 3, 4, 5];
// Her sayıyı ikiyle çarparak dönüştür
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)Bu yaklaşım, manuel olarak yeni bir liste oluşturmaktan ve her bir öğeyi dönüştürmek için bir döngü kullanmaktan çok daha zariftir. map() yöntemi, veri dönüşümlerini net ve özlü bir şekilde ifade etmenize olanak tanıyarak fonksiyonel programlamadaki temel bir kavramı temsil eder.
Görev
KolayBir mağaza envanterindeki tüm ürünlere yüzde bazlı fiyat ayarlamaları uygulayarak ürün fiyatlandırma sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:
- Mağaza adını temsil eden bir dize (string) girdisi okumalı
- Orijinal ürün fiyatlarını temsil eden birden fazla ondalık girdi okumalı (girdi
-1değeri alındığında sona erecektir) - Yüzde ayarlamasını temsil eden bir ondalık girdi okumalı (fiyat artışı için pozitif, indirim için negatif)
- Her bir fiyatı yüzde ayarlamasını uygulayarak dönüştürmek için
map()metodunu kullanmalı - Fiyatlandırma ayarlama sonuçlarını tam olarak aşağıda gösterilen formatta yazdırmalı
Örneğin, mağaza adı "Tech Store", fiyatlar 99.99, 149.50, 79.99, 199.99 ve ayarlama 15.0 (%15 artış) ise, programınızın çıktısı şu şekilde olmalıdır:
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 completedEğer mağaza adı "Fashion Outlet", fiyatlar 29.99, 45.00 ve ayarlama -20.0 (%20 indirim) ise, programınızın çıktısı şu şekilde olmalıdır:
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 completedEğer mağaza adı "Book Corner" ise ve 0.0 ayarlama ile yalnızca tek bir fiyat 12.50 verilmişse, programınızın çıktısı şu şekilde olmalıdır:
Store: Book Corner
Original prices: [12.5]
Applying 0.0% adjustment
Adjusted prices: (12.5)
Total items processed: 1
Status: Price adjustment completedProgramınız, şu formülü kullanarak yeni fiyatı hesaplayan bir dönüşüm fonksiyonu ile map() metodunu kullanmalıdır: originalPrice * (1 + percentage / 100). map() metodu, parantez formatında görüntülenecek olan tüm ayarlanmış fiyatları içeren bir iterable döndürmelidir.
Kendin dene
import 'dart:io';
void main() {
// Mağaza adını oku
String? storeName = stdin.readLineSync();
// -1 ile karşılaşana kadar fiyatları oku
List<double> prices = [];
while (true) {
String? input = stdin.readLineSync();
double price = double.parse(input!);
if (price == -1) {
break;
}
prices.add(price);
}
// Yüzde ayarlamasını oku
String? adjustmentInput = stdin.readLineSync();
double adjustment = double.parse(adjustmentInput!);
// TODO: Kodunuzu aşağıya yazın
// Tüm fiyatlara yüzde ayarlamasını uygulamak için map() metodunu kullanın
// Formül: originalPrice * (1 + percentage / 100)
// Sonuçları yazdır
print('Store: $storeName');
print('Original prices: $prices');
print('Applying $adjustment% adjustment');
// Ayarlanmış fiyatları parantez formatında yazdır
// İşlenen toplam öğe sayısını yazdır
// Durum mesajını yazdır
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1İleri Düzey Liste İşlemleri
Liste Özellikleri: first & lastListe Durumu: isEmpty & isNotEmptyBir Listeyi Tersine ÇevirmeListeye Ekleme: insertListeden Silme: removeWhereListede Bulma: indexOfBir Listeyi SıralamaBir Listeyi KarıştırmaÖzet - Liste Düzenleyici4İleri Seviye Map İşlemleri
Map Üzerinde GezinmeAnahtar ve Değer KontrolüMap Özellikleri: keys & valuesKoşullu Ekleme: putIfAbsentMap'ten Öge Kaldırmaİç İçe Map'lerÖzet - Envanter Güncelleme7İleri Seviye Fonksiyonlar
Anonim FonksiyonlarFonksiyonları Argüman Olarak AktarmaClosure'ları AnlamakÖzyinelemeye GirişÖzyinelemeli Fonksiyon: Geri SayımÖzyinelemeli Fonksiyon: FaktöriyelÖzet - Liste İşleyici10Son Meydan Okumalar
Meydan Okuma: Not SıralayıcıMeydan Okuma: Sesli Harf SayacıMeydan Okuma: FizzBuzz2Fonksiyonel Liste İşlemleri
'map' ile Dönüştürme'where' ile Filtreleme'.toList()' Kullanımı'any' ile Koşul Kontrolü'every' ile Koşullar'firstWhere' ile BulmaÖzet - Veri Filtreleme5Proje: Alışveriş Sepeti Hesaplayıcı
Proje KurulumuSepete Ürün Ekleme3Kümeler
Küme Nedir?Küme OluşturmaKümelere Eleman Ekleme ve ÇıkarmaKüme İçinde Eleman KontrolüListeyi Kümeye DönüştürmeKüme BirleşimiKüme KesişimiKüme FarkıÖzet - Benzersiz Davetli Listesi