Masukkan Password
21 2.7 Foreach Loop in Dart Programming Language | Loops in Dart | Learn Dart Language | Dart Course
Materi kali ini membahas forEach loop di Dart. Kalau sebelumnya kita belajar for loop yang mengharuskan kita mengatur index secara manual, forEach membuat proses membaca setiap item dalam List menjadi lebih sederhana.
Ada sedikit kesalahan transkripsi pada caption: βfar eachβ maksudnya forEach, dan βDOT programmingβ maksudnya Dart programming.
1. Apa itu forEach?
forEach digunakan untuk mengunjungi/mengiterasi setiap elemen yang ada di sebuah collection, misalnya List.
Misalnya kita punya:
List<String> items = [
"Item 1",
"Item 2",
"Item 3",
"Item 4",
"Item 5"
];
Kita ingin mencetak semua item.
Dengan for biasa:
for (int i = 0; i < items.length; i++) {
print(items[i]);
}
Kita harus memikirkan:
- mulai dari index berapa?
- kapan berhenti?
- bagaimana menaikkan
i? - bagaimana mengambil
items[i]?
Dengan forEach:
items.forEach((item) {
print(item);
});
Lebih sederhana.
Output:
Item 1
Item 2
Item 3
Item 4
Item 5
Jadi konsep utamanya:
forEachmengambil setiap item dari collection satu per satu dan menjalankan kode yang kita berikan untuk setiap item tersebut.
2. Kenapa Disebut forEach?
Namanya bisa dibaca secara harfiah:
for each = untuk setiap
Misalnya:
items.forEach((item) {
print(item);
});
Bisa kita baca:
“Untuk setiap
itemdi dalamitems, jalankanprint(item).”
Kalau isi List:
Item 1
Item 2
Item 3
Item 4
Item 5
maka forEach akan melakukan:
item = Item 1 β print
item = Item 2 β print
item = Item 3 β print
item = Item 4 β print
item = Item 5 β print
3. Syntax Dasar forEach
Bentuk sederhananya:
list.forEach((item) {
// kode yang dijalankan
});
Contoh:
List<String> names = [
"Ahad",
"Ali",
"Budi"
];
names.forEach((name) {
print(name);
});
Output:
Ahad
Ali
Budi
Bagian:
(item)
adalah variabel yang akan menerima item saat ini.
Nama variabelnya bebas.
Misalnya:
names.forEach((name) {
print(name);
});
atau:
names.forEach((x) {
print(x);
});
atau:
names.forEach((person) {
print(person);
});
Semuanya bisa.
Tetapi sebaiknya gunakan nama yang jelas:
names.forEach((name) {
print(name);
});
lebih mudah dibaca daripada:
names.forEach((x) {
print(x);
});
4. Bagaimana Cara Kerjanya?
Misalnya:
List<String> items = [
"Item 1",
"Item 2",
"Item 3"
];
items.forEach((item) {
print(item);
});
Secara konsep, Dart melakukan seperti ini:
Ambil Item 1
β
masukkan ke variable item
β
print(item)
Ambil Item 2
β
masukkan ke variable item
β
print(item)
Ambil Item 3
β
masukkan ke variable item
β
print(item)
Jadi item tidak berarti semua item sekaligus.
item mewakili satu item pada saat itu.
5. for vs forEach
Perhatikan dua kode berikut.
Menggunakan for
List<String> names = [
"Ahad",
"Ali",
"Budi"
];
for (int i = 0; i < names.length; i++) {
print(names[i]);
}
Menggunakan forEach
List<String> names = [
"Ahad",
"Ali",
"Budi"
];
names.forEach((name) {
print(name);
});
Hasilnya sama:
Ahad
Ali
Budi
Tetapi cara berpikirnya berbeda.
Dengan for, kita berpikir:
“Saya akan berjalan dari index 0 sampai index terakhir.”
Dengan forEach, kita berpikir:
“Saya ingin melakukan sesuatu untuk setiap item.”
Untuk sekadar memproses semua item, forEach sering terasa lebih sederhana.
6. forEach Tidak Memberikan Index Secara Langsung
Ini poin penting dari materi video.
Ketika kita menulis:
items.forEach((item) {
print(item);
});
yang kita dapatkan secara langsung adalah:
item
bukan:
index + item
Misalnya:
Index Value
0 Item 1
1 Item 2
2 Item 3
3 Item 4
4 Item 5
forEach biasa hanya memberikan value:
Item 1
Item 2
Item 3
Item 4
Item 5
7. Kalau Kita Membutuhkan Index?
Nah, ini bagian yang dibahas di video.
Kita bisa menggunakan:
asMap()
Misalnya:
List<String> items = [
"Item 1",
"Item 2",
"Item 3",
"Item 4",
"Item 5"
];
items.asMap().forEach((index, item) {
print("Index: $index, Value: $item");
});
Hasil:
Index: 0, Value: Item 1
Index: 1, Value: Item 2
Index: 2, Value: Item 3
Index: 3, Value: Item 4
Index: 4, Value: Item 5
8. Apa Itu asMap()?
Ini perlu dipahami karena mungkin terlihat aneh.
Kita punya List:
List<String> items = [
"Item 1",
"Item 2",
"Item 3"
];
Secara konsep:
Index β Value
0 β Item 1
1 β Item 2
2 β Item 3
Ketika kita menggunakan:
items.asMap()
kita mendapatkan representasi yang menghubungkan index dengan value.
Secara konsep mirip:
0 β Item 1
1 β Item 2
2 β Item 3
Kemudian kita bisa melakukan:
items.asMap().forEach((index, item) {
print("$index: $item");
});
Jadi:
index
berisi index.
Sedangkan:
item
berisi value.
9. Kenapa forEach Bisa Menerima Dua Parameter?
Biasanya:
items.forEach((item) {
print(item);
});
hanya menerima satu parameter karena kita menggunakan forEach langsung pada List.
Setelah:
items.asMap()
bentuk datanya menjadi pasangan:
key β value
Maka:
items.asMap().forEach((index, item) {
print(index);
print(item);
});
Parameter pertama:
index
Parameter kedua:
item
Konsep ini mirip dengan Map yang nanti akan kamu temui lebih jauh di Dart.
10. Contoh forEach dengan List Angka
forEach tidak hanya untuk String.
Kita juga bisa menggunakannya pada List<int>.
List<int> numbers = [10, 20, 30, 40, 50];
numbers.forEach((number) {
print(number);
});
Output:
10
20
30
40
50
11. Menghitung Jumlah Semua Angka
Ini contoh yang cukup penting dari video.
Misalnya:
List<int> numbers = [10, 20, 30, 40, 50];
Kita ingin menghitung totalnya.
Pertama buat variabel:
int sum = 0;
Kemudian:
numbers.forEach((number) {
sum += number;
});
Terakhir:
print(sum);
Program lengkap:
List<int> numbers = [10, 20, 30, 40, 50];
int sum = 0;
numbers.forEach((number) {
sum += number;
});
print(sum);
Output:
150
12. Bagaimana sum += number Bekerja?
Ini penting karena sebelumnya kita sudah belajar assignment operator.
Baris:
sum += number;
adalah bentuk singkat dari:
sum = sum + number;
Misalnya awalnya:
sum = 0
Kemudian:
number = 10
maka:
sum = 0 + 10
sum = 10
Berikutnya:
number = 20
sum = 10 + 20
sum = 30
Berikutnya:
number = 30
sum = 30 + 30
sum = 60
Kemudian:
60 + 40 = 100
100 + 50 = 150
Akhirnya:
sum = 150
13. Visualisasi forEach untuk Sum
Kita bisa membayangkannya seperti ini:
List:
[10, 20, 30, 40, 50]
sum = 0
β
10 β sum = 0 + 10 = 10
β
20 β sum = 10 + 20 = 30
β
30 β sum = 30 + 30 = 60
β
40 β sum = 60 + 40 = 100
β
50 β sum = 100 + 50 = 150
Hasil akhir:
sum = 150
Ini salah satu pola yang sangat umum dalam programming:
Ambil setiap item β lakukan perhitungan β simpan hasil sementara.
14. Menghitung Average / Rata-rata
Video juga menunjukkan bahwa setelah mendapatkan sum, kita bisa menghitung rata-rata.
Rumus:
average = total / jumlah data
Dalam Dart:
List<int> numbers = [10, 20, 30, 40, 50];
int sum = 0;
numbers.forEach((number) {
sum += number;
});
double average = sum / numbers.length;
print("Sum: $sum");
print("Average: $average");
Output:
Sum: 150
Average: 30.0
Kenapa:
150 / 5 = 30
15. Kenapa Menggunakan double untuk Average?
Karena hasil pembagian bisa berupa angka desimal.
Misalnya:
10 / 3 = 3.333...
Jadi untuk rata-rata, biasanya kita menggunakan:
double average
Contoh:
int sum = 10;
int count = 3;
double average = sum / count;
Hasilnya kira-kira:
3.3333333333333335
Kalau ingin membatasi angka di belakang koma:
print(average.toStringAsFixed(2));
hasil:
3.33
Ini juga menghubungkan materi kita dengan .toStringAsFixed() yang sudah dipelajari sebelumnya.
16. Contoh Lengkap Sum + Average
void main() {
List<int> numbers = [10, 20, 30, 40, 50];
int sum = 0;
numbers.forEach((number) {
sum += number;
});
double average = sum / numbers.length;
print("Sum: $sum");
print("Average: ${average.toStringAsFixed(2)}");
}
Output:
Sum: 150
Average: 30.00
17. forEach Bisa Digabungkan dengan if
Kita juga bisa menggunakan condition di dalam forEach.
Misalnya kita hanya ingin mencetak angka genap:
List<int> numbers = [1, 2, 3, 4, 5, 6];
numbers.forEach((number) {
if (number % 2 == 0) {
print(number);
}
});
Output:
2
4
6
Bagaimana cara kerjanya?
1 β 1 % 2 == 0 β false β tidak print
2 β 2 % 2 == 0 β true β print
3 β 3 % 2 == 0 β false β tidak print
4 β 4 % 2 == 0 β true β print
5 β 5 % 2 == 0 β false β tidak print
6 β 6 % 2 == 0 β true β print
Jadi kita menggabungkan:
forEach
+
if
+
modulus (%)
18. Contoh Mencetak Angka Ganjil
List<int> numbers = [1, 2, 3, 4, 5, 6];
numbers.forEach((number) {
if (number % 2 != 0) {
print(number);
}
});
Output:
1
3
5
19. Contoh dengan String
Misalnya kita punya daftar nama:
List<String> names = [
"Ahad",
"Budi",
"Siti",
"Rina"
];
Kita bisa membuat sapaan:
names.forEach((name) {
print("Hello $name");
});
Output:
Hello Ahad
Hello Budi
Hello Siti
Hello Rina
20. Contoh Mengubah Tampilan Setiap Item
Misalnya:
List<String> names = [
"ahad",
"budi",
"siti"
];
names.forEach((name) {
print(name.toUpperCase());
});
Output:
AHAD
BUDI
SITI
Di sini kita menggunakan materi String yang sudah dipelajari:
.toUpperCase()
Jadi forEach sangat berguna ketika kita ingin melakukan operasi yang sama kepada setiap item.
21. Analogi Sederhana
Bayangkan ada 5 orang berdiri dalam antrean:
Ahad
Ali
Budi
Siti
Rina
Kamu mengatakan:
“Untuk setiap orang, ucapkan Hello.”
Maka:
Ahad β Hello Ahad
Ali β Hello Ali
Budi β Hello Budi
Siti β Hello Siti
Rina β Hello Rina
Itulah forEach.
Kamu tidak perlu mengatakan:
“Ambil orang nomor 0, lalu nomor 1, lalu nomor 2…”
Kamu cukup mengatakan:
“Untuk setiap orang, lakukan ini.”
22. Perbedaan for dan forEach
for | forEach |
|---|---|
| Menggunakan initialization, condition, increment | Tidak perlu tiga bagian tersebut |
| Bisa mengontrol index dengan bebas | Fokus pada setiap item |
| Cocok jika butuh kontrol loop | Cocok untuk memproses setiap item |
Bisa berhenti dengan break | Tidak digunakan dengan cara yang sama seperti for |
| Bisa berjalan mundur | Biasanya iterasi item dari collection |
| Lebih fleksibel | Lebih ringkas untuk operasi tiap item |
Contoh for:
for (int i = 0; i < names.length; i++) {
print(names[i]);
}
Contoh forEach:
names.forEach((name) {
print(name);
});
23. Kapan Sebaiknya Menggunakan forEach?
Gunakan forEach ketika kamu ingin mengatakan:
“Untuk setiap item, lakukan sesuatu.”
Contoh:
numbers.forEach((number) {
print(number);
});
atau:
names.forEach((name) {
print("Hello $name");
});
atau:
numbers.forEach((number) {
if (number % 2 == 0) {
print(number);
}
});
24. Kapan for Lebih Cocok?
Kalau kamu membutuhkan kontrol terhadap:
- index
- arah perulangan
- kondisi yang lebih spesifik
breakcontinue
for biasa sering lebih cocok.
Misalnya:
for (int i = 10; i >= 1; i--) {
print(i);
}
Kita ingin berjalan mundur.
Atau:
for (int i = 0; i < names.length; i++) {
print("Index $i = ${names[i]}");
}
Di sini index memang menjadi bagian penting.
25. forEach dan Index
Kalau membutuhkan index, ada beberapa pendekatan.
Salah satunya seperti materi video:
items.asMap().forEach((index, item) {
print("Index: $index, Value: $item");
});
Tetapi untuk pemula, jangan merasa bahwa kamu harus menggunakan forEach untuk semua hal.
Kalau index memang menjadi pusat perhatian, for biasa sering lebih mudah:
for (int i = 0; i < items.length; i++) {
print("Index: $i, Value: ${items[i]}");
}
Jadi:
forEachbukan berarti selalu lebih baik daripadafor.
Pilih yang membuat kode paling jelas.
26. Hal Penting: forEach Bukan for
Walaupun keduanya sama-sama melakukan perulangan, mekanismenya berbeda.
for:
for (int i = 0; i < list.length; i++) {
print(list[i]);
}
Kamu sendiri yang mengatur:
i mulai dari mana
β
condition
β
i berubah bagaimana
Sedangkan forEach:
list.forEach((item) {
print(item);
});
Collection yang melakukan proses iterasi, dan kamu memberikan fungsi yang akan dijalankan untuk setiap item.
Nah, istilah:
(item) {
print(item);
}
ini sebenarnya adalah anonymous function / function expression.
Untuk sekarang, cukup pahami:
forEachmenerima sebuah fungsi yang akan dijalankan untuk setiap item.
Nanti konsep function akan menjadi lebih mudah setelah kamu mempelajarinya secara khusus.
27. Contoh Program yang Lebih Realistis
Misalnya kita memiliki nilai siswa:
List<int> scores = [80, 65, 90, 55, 75];
Kita ingin mencetak status setiap nilai.
scores.forEach((score) {
if (score >= 60) {
print("$score: Pass");
} else {
print("$score: Fail");
}
});
Output:
80: Pass
65: Pass
90: Pass
55: Fail
75: Pass
Perhatikan bagaimana beberapa materi kita bergabung:
List
β
forEach
β
if-else
β
relational operator >=
β
String interpolation
28. Contoh Menghitung Total Harga
Ini contoh yang lebih dekat dengan program nyata.
List<int> prices = [10000, 15000, 20000, 5000];
int total = 0;
prices.forEach((price) {
total += price;
});
print("Total: $total");
Output:
Total: 50000
Karena:
10000
+ 15000
+ 20000
+ 5000
---------
50000
29. Contoh forEach + Diskon
Misalnya kita memiliki daftar harga dan ingin mencetak apakah barang mahal atau murah:
List<int> prices = [10000, 50000, 100000, 20000];
prices.forEach((price) {
if (price >= 50000) {
print("$price: Expensive");
} else {
print("$price: Affordable");
}
});
Output:
10000: Affordable
50000: Expensive
100000: Expensive
20000: Affordable
30. Kesalahan yang Sering Dilakukan Pemula
1. Mengira item adalah nama khusus
Misalnya:
items.forEach((item) {
print(item);
});
item bukan keyword khusus.
Kamu bisa menggantinya:
items.forEach((x) {
print(x);
});
atau:
items.forEach((product) {
print(product);
});
Nama item dipilih programmer.
2. Lupa bahwa forEach berjalan untuk setiap item
Misalnya:
numbers.forEach((number) {
print(number * 2);
});
Jika:
[1, 2, 3]
hasil:
2
4
6
Bukan hanya sekali.
3. Salah memahami length
Kalau:
List<int> numbers = [10, 20, 30, 40, 50];
maka:
numbers.length
adalah:
5
Index:
0, 1, 2, 3, 4
Ini sama seperti pembahasan for sebelumnya.
4. Menggunakan forEach untuk semua situasi
Jangan berpikir:
“
forEachadalah versi yang lebih bagus darifor.”
Tidak.
Keduanya punya kegunaan masing-masing.
Kalau membutuhkan index dan kontrol loop yang lebih banyak, for bisa lebih cocok.
31. Cara Mengingat forEach
Ingat kalimat sederhana ini:
“Untuk setiap item, lakukan sesuatu.”
Contoh:
items.forEach((item) {
print(item);
});
Terjemahkan:
“Untuk setiap
itemdi dalamitems, printitem.”
Kalau:
numbers.forEach((number) {
sum += number;
});
Terjemahkan:
“Untuk setiap
number, tambahkan number kesum.”
Kalau:
numbers.forEach((number) {
if (number % 2 == 0) {
print(number);
}
});
Terjemahkan:
“Untuk setiap number, kalau number genap, print number.”
32. Cheat Sheet
Loop setiap item
list.forEach((item) {
print(item);
});
Dengan index
list.asMap().forEach((index, item) {
print("$index: $item");
});
Menjumlahkan
int sum = 0;
numbers.forEach((number) {
sum += number;
});
Menghitung rata-rata
double average = sum / numbers.length;
Dengan if
numbers.forEach((number) {
if (number % 2 == 0) {
print(number);
}
});
33. Ringkasan Materi
Kita sudah belajar bahwa:
forEach digunakan untuk mengiterasi setiap elemen collection.
items.forEach((item) {
print(item);
});
item mewakili item yang sedang diproses.
Item 1 β item
Item 2 β item
Item 3 β item
Kalau membutuhkan index:
items.asMap().forEach((index, item) {
print(index);
print(item);
});
forEach bisa digunakan untuk perhitungan:
int sum = 0;
numbers.forEach((number) {
sum += number;
});
Bisa digabung dengan if:
numbers.forEach((number) {
if (number % 2 == 0) {
print(number);
}
});
π§ Perbedaan paling penting
Kalau kamu melihat:
for (int i = 0; i < list.length; i++) {
print(list[i]);
}
pola pikirnya:
“Saya mengontrol index.”
Sedangkan:
list.forEach((item) {
print(item);
});
pola pikirnya:
“Saya ingin melakukan sesuatu untuk setiap item.”
Dan ini adalah inti dari forEach.
Setelah memahami forEach, materi berikutnya seperti for-in akan terasa lebih mudah, karena for-in juga memiliki tujuan utama yang mirip: mengambil elemen collection satu per satu, tetapi dengan sintaks yang berbeda dan biasanya lebih nyaman dibaca.