Menu
Coddy logo textTech

'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.

challenge icon

Görev

Kolay

Bir 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:

  1. Mağaza adını temsil eden bir dize (string) girdisi okumalı
  2. Orijinal ürün fiyatlarını temsil eden birden fazla ondalık girdi okumalı (girdi -1 değeri alındığında sona erecektir)
  3. Yüzde ayarlamasını temsil eden bir ondalık girdi okumalı (fiyat artışı için pozitif, indirim için negatif)
  4. Her bir fiyatı yüzde ayarlamasını uygulayarak dönüştürmek için map() metodunu kullanmalı
  5. 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 completed

Eğ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 completed

Eğ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 completed

Programı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
}
quiz iconKendini test et

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