Menu
CoddyTech

Mengubah dengan 'map'

Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 10 dari 65.

Saat kamu perlu mengubah setiap elemen dalam list menjadi sesuatu yang baru, Dart menyediakan method map() yang andal. Method ini menerapkan fungsi transformasi pada setiap elemen dalam list dan menghasilkan Iterable lazy baru yang berisi hasil transformasi (panggil .toList() untuk mendapatkan list).

method map() menerima fungsi sebagai parameternya yang menentukan cara setiap elemen harus diubah. Fungsi ini menerima setiap elemen dari list asli dan mengembalikan versi yang sudah diubah. method map() kemudian mengumpulkan semua nilai yang sudah diubah ini ke dalam list baru.

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

// Ubah setiap angka menjadi dua kali lipat
var doubled = numbers.map((number) => number * 2);
print(doubled);  // (2, 4, 6, 8, 10)

Pendekatan ini jauh lebih elegan daripada membuat list baru secara manual dan menggunakan perulangan untuk mengubah setiap elemennya. Method map() mewakili konsep mendasar dalam pemrograman fungsional, sehingga kamu dapat menyatakan transformasi data dengan cara yang jelas dan ringkas.

challenge icon

Tantangan

Mudah

Buat program yang mengelola sistem penetapan harga produk dengan menerapkan penyesuaian harga berdasarkan persentase pada semua barang dalam inventaris toko. Programmu harus:

  1. Membaca input string yang mewakili nama toko
  2. Membaca beberapa input desimal yang mewakili harga asli produk (input akan berakhir saat kamu menerima -1)
  3. Membaca input desimal yang mewakili penyesuaian persentase (positif untuk kenaikan harga, negatif untuk diskon)
  4. Menggunakan method map() untuk mengubah setiap harga dengan menerapkan penyesuaian persentase
  5. Mencetak hasil penyesuaian harga dalam format persis seperti yang ditunjukkan di bawah

Misalnya, jika nama toko adalah "Tech Store", harganya adalah 99.99, 149.50, 79.99, 199.99, dan penyesuaiannya adalah 15.0 (kenaikan 15%), programmu harus menghasilkan:

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

Jika nama toko adalah "Fashion Outlet", harganya adalah 29.99, 45.00, dan penyesuaiannya adalah -20.0 (diskon 20%), programmu harus menghasilkan:

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

Jika nama toko adalah "Book Corner" dan hanya satu harga 12.50 yang diberikan dengan penyesuaian 0.0, programmu harus menghasilkan:

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

Programmu harus menggunakan method map() dengan fungsi transformasi yang menghitung harga baru menggunakan rumus: originalPrice * (1 + percentage / 100). Method map() harus mengembalikan iterable yang berisi semua harga yang telah disesuaikan, yang akan ditampilkan dalam format tanda kurung.

Coba sendiri

import 'dart:io';

void main() {
  // Baca nama toko
  String? storeName = stdin.readLineSync();
  
  // Baca harga hingga menemukan -1
  List<double> prices = [];
  while (true) {
    String? input = stdin.readLineSync();
    double price = double.parse(input!);
    if (price == -1) {
      break;
    }
    prices.add(price);
  }
  
  // Baca persentase penyesuaian
  String? adjustmentInput = stdin.readLineSync();
  double adjustment = double.parse(adjustmentInput!);
  
  // TODO: Tulis kodemu di bawah ini
  // Gunakan method map() untuk menerapkan penyesuaian persentase pada semua harga
  // Rumus: originalPrice * (1 + percentage / 100)
  
  // Tampilkan hasilnya
  print('Store: $storeName');
  print('Original prices: $prices');
  print('Applying $adjustment% adjustment');
  // Cetak harga yang sudah disesuaikan dalam format tanda kurung
  // Cetak jumlah item yang diproses
  // Cetak pesan status
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Dart online