Masukkan Password
43 Chapter 4 Practice Exercise | Chapter Collections Exercise | Learn Dart | Dart Programming Course
Materi ini adalah latihan Chapter 4, tetapi sebenarnya latihan ini menggabungkan hampir semua materi yang sudah kamu pelajari sebelumnya: List, Set, Map, where(), loop, user input, dan operasi collection.
Saya akan bahas satu per satu, mulai dari maksud soalnya → cara berpikir → kode → penjelasan kode.
Catatan: kata “DOT” pada caption adalah hasil transkripsi; yang dimaksud adalah Dart.
📝 Practice Exercise — Chapter 4 Dart
Ada 7 soal:
- List nama
- Set buah
- List pengeluaran + input user
- List kosong berisi 7 hari
- List nama teman +
where() - Map data seseorang
- Map nama & telepon +
where()
1. Create a list of names and print all names
Soalnya:
Buat sebuah List yang berisi nama-nama, lalu print semua nama menggunakan List.
Ini adalah soal paling dasar tentang List.
Langkah berpikir
Kita membutuhkan:
List
↓
isi beberapa nama
↓
loop
↓
print setiap nama
Contoh:
void main() {
List<String> names = [
"Budi",
"Andi",
"Siti",
"Joko",
];
for (String name in names) {
print(name);
}
}
Output:
Budi
Andi
Siti
Joko
Penjelasan
Membuat List
List<String> names = [
"Budi",
"Andi",
"Siti",
"Joko",
];
List<String> berarti:
List ini hanya boleh berisi data bertipe
String.
Sedangkan:
names
adalah nama variabelnya.
Kemudian:
[
"Budi",
"Andi",
"Siti",
"Joko",
]
adalah isi List.
Print semua nama
Kita menggunakan:
for (String name in names) {
print(name);
}
Cara membacanya:
“Untuk setiap
nameyang ada di dalamnames, printname.”
Misalnya:
names
↓
Budi
Andi
Siti
Joko
Loop akan mengambil satu per satu:
name = Budi → print
name = Andi → print
name = Siti → print
name = Joko → print
🧠 Intinya
Soal nomor 1 menguji:
- membuat List
- tipe data
String - loop
for-in print()
2. Create a Set of fruits and print all fruits using Loop
Soalnya:
Buat sebuah Set yang berisi buah-buahan dan print semua buah menggunakan loop.
Karena diminta Set, kita tidak menggunakan [], tetapi {}.
void main() {
Set<String> fruits = {
"Apple",
"Banana",
"Orange",
"Mango",
};
for (String fruit in fruits) {
print(fruit);
}
}
Output:
Apple
Banana
Orange
Mango
Kenapa menggunakan Set?
Karena Set digunakan untuk menyimpan data yang unik.
Misalnya:
Set<String> fruits = {
"Apple",
"Banana",
"Apple",
};
Hasilnya hanya:
Apple
Banana
Apple tidak akan disimpan dua kali.
Loop-nya sama dengan List
for (String fruit in fruits) {
print(fruit);
}
Bedanya hanya collection-nya.
List:
List<String> fruits = [...];
Set:
Set<String> fruits = {...};
🧠 Ingat
List → boleh duplicate
Set → tidak boleh duplicate
3. List of expenses + user input + total
Ini soal yang lebih menarik.
Soalnya:
Buat program yang menerima daftar nominal pengeluaran dari user, simpan ke dalam List, kemudian tampilkan totalnya.
Misalnya user memasukkan:
10000
25000
15000
Maka:
Total = 50000
Langkah berpikir
Kita membutuhkan:
User input
↓
Simpan ke List
↓
Hitung semua angka
↓
Print total
Contoh program:
import 'dart:io';
void main() {
List<double> expenses = [];
print("Masukkan pengeluaran.");
print("Ketik 0 untuk selesai.");
while (true) {
stdout.write("Pengeluaran: ");
double amount = double.parse(stdin.readLineSync()!);
if (amount == 0) {
break;
}
expenses.add(amount);
}
double total = 0;
for (double expense in expenses) {
total += expense;
}
print("Daftar pengeluaran: $expenses");
print("Total pengeluaran: $total");
}
Mari kita bedah pelan-pelan
3.1 Import dart:io
import 'dart:io';
Kita membutuhkan dart:io karena ingin mengambil input dari keyboard.
3.2 Membuat List kosong
List<double> expenses = [];
Artinya:
Buat List kosong bernama
expensesyang hanya boleh berisi angka desimal (double).
Awalnya:
expenses = []
Belum ada data.
3.3 Mengambil input
stdout.write("Pengeluaran: ");
Menampilkan:
Pengeluaran:
Kemudian:
stdin.readLineSync()
digunakan untuk membaca input user.
Misalnya user mengetik:
25000
Input tersebut pada dasarnya dibaca sebagai String.
3.4 Mengubah String menjadi angka
Karena pengeluaran adalah angka, kita menggunakan:
double.parse(...)
Contoh:
double amount = double.parse(stdin.readLineSync()!);
Alurnya:
User mengetik "25000"
↓
String
↓
double.parse()
↓
25000.0
↓
amount
3.5 Menambahkan ke List
Setelah mendapatkan angka:
expenses.add(amount);
Misalnya:
Input pertama:
10000
List:
[10000]
Input kedua:
25000
List:
[10000, 25000]
Input ketiga:
15000
List:
[10000, 25000, 15000]
3.6 Kenapa menggunakan while?
Karena kita belum tahu berapa banyak pengeluaran yang akan dimasukkan user.
Bisa saja:
3 pengeluaran
atau:
10 pengeluaran
atau:
100 pengeluaran
Maka kita gunakan:
while (true)
dan berhenti ketika user memasukkan 0.
if (amount == 0) {
break;
}
break berarti:
Keluar dari loop.
3.7 Menghitung total
Setelah semua data masuk:
double total = 0;
Kemudian:
for (double expense in expenses) {
total += expense;
}
Misalnya:
expenses = [10000, 25000, 15000]
Proses:
total = 0
10000 → total = 10000
25000 → total = 35000
15000 → total = 50000
Hasil:
total = 50000
4. Empty List days + add()
Soalnya:
Buat List kosong bertipe String bernama
days. Gunakan methodadd()untuk memasukkan nama tujuh hari, lalu print semuanya.
Ini menguji pemahaman List kosong dan add().
Kode:
void main() {
List<String> days = [];
days.add("Monday");
days.add("Tuesday");
days.add("Wednesday");
days.add("Thursday");
days.add("Friday");
days.add("Saturday");
days.add("Sunday");
for (String day in days) {
print(day);
}
}
Kenapa awalnya []?
Karena soalnya secara eksplisit meminta:
Create an empty list.
Jadi:
List<String> days = [];
Artinya:
days = []
List masih kosong.
Kemudian kita menggunakan:
days.add("Monday");
Sekarang:
[Monday]
Kemudian:
days.add("Tuesday");
Menjadi:
[Monday, Tuesday]
Dan seterusnya.
add() itu apa?
add() digunakan untuk menambahkan satu item ke bagian akhir List.
Contoh:
List<String> names = [];
names.add("Budi");
names.add("Andi");
names.add("Siti");
Hasil:
[Budi, Andi, Siti]
5. Nama teman + where() untuk mencari nama yang dimulai A
Soalnya:
Masukkan tujuh nama teman ke dalam List, kemudian gunakan
where()untuk mencari nama yang dimulai dengan huruf A.
Misalnya:
Budi
Andi
Siti
Agus
Joko
Ahmad
Rina
Kita ingin mendapatkan:
Andi
Agus
Ahmad
Kodenya
void main() {
List<String> friends = [
"Budi",
"Andi",
"Siti",
"Agus",
"Joko",
"Ahmad",
"Rina",
];
List<String> result = friends
.where((name) => name.startsWith("A"))
.toList();
print(result);
}
Output:
[Andi, Agus, Ahmad]
Bedah where()
Bagian ini:
friends.where(
(name) => name.startsWith("A")
)
artinya:
Periksa setiap nama. Kalau nama dimulai dengan
"A", simpan.
Misalnya:
Budi → startsWith("A") → false ❌
Andi → startsWith("A") → true ✅
Siti → startsWith("A") → false ❌
Agus → startsWith("A") → true ✅
Joko → startsWith("A") → false ❌
Ahmad → startsWith("A") → true ✅
Rina → startsWith("A") → false ❌
Maka hasilnya:
Andi
Agus
Ahmad
Apa itu startsWith()?
name.startsWith("A")
berarti:
Apakah
namedimulai dengan huruf"A"?
Contoh:
"Ahmad".startsWith("A") // true
"Agus".startsWith("A") // true
"Budi".startsWith("A") // false
Kenapa .toList()?
Karena:
where()
menghasilkan:
Iterable
Kalau kita ingin hasilnya menjadi List:
.toList()
Jadi:
friends.where(...).toList();
bisa dipahami:
List
↓
where()
↓
Iterable
↓
toList()
↓
List hasil
6. Map: name, address, age, country
Soalnya:
Buat Map dengan key
name,address,age, dancountry. Isi nilainya, update country ke negara lain, lalu print semua key dan value.
Ini menguji pemahaman Map.
Contoh:
void main() {
Map<String, dynamic> person = {
"name": "Budi",
"address": "Madiun",
"age": 20,
"country": "Indonesia",
};
person["country"] = "Malaysia";
person.forEach((key, value) {
print("$key: $value");
});
}
Output:
name: Budi
address: Madiun
age: 20
country: Malaysia
Kenapa Map<String, dynamic>?
Karena value kita memiliki beberapa tipe berbeda.
name → String
address → String
age → int
country → String
Jadi kita bisa menggunakan:
Map<String, dynamic>
Artinya:
Key → String
Value → bisa berbagai tipe
6.1 Membuat Map
Map<String, dynamic> person = {
"name": "Budi",
"address": "Madiun",
"age": 20,
"country": "Indonesia",
};
Strukturnya:
key value
──────── ─────────
name Budi
address Madiun
age 20
country Indonesia
6.2 Update country
Ini bagian yang penting:
person["country"] = "Malaysia";
Awalnya:
country → Indonesia
Kemudian:
country → Malaysia
Dalam Map, syntax yang sama digunakan untuk menambah maupun meng-update data.
Misalnya key belum ada:
person["city"] = "Madiun";
maka key baru dibuat.
Kalau key sudah ada:
person["country"] = "Malaysia";
maka value lama diperbarui.
6.3 Print semua key dan value
Kita bisa menggunakan:
person.forEach((key, value) {
print("$key: $value");
});
Misalnya:
key = name
value = Budi
maka:
name: Budi
Kemudian Map berpindah ke entry berikutnya.
7. Map name & phone + where()
Ini soal terakhir dan cukup menarik.
Soalnya:
Buat Map dengan key
namedanphone, isi beberapa data. Gunakanwhere()untuk mencari semua key yang panjangnya 4 karakter.
Misalnya kita punya:
Map<String, String> users = {
"John": "0812345678",
"Budi": "0823456789",
"Rina": "0834567890",
"Ahmad": "0845678901",
};
Kita ingin mencari key yang panjangnya 4 karakter.
Key:
John → 4 ✅
Budi → 4 ✅
Rina → 4 ✅
Ahmad → 5 ❌
Kodenya
void main() {
Map<String, String> users = {
"John": "0812345678",
"Budi": "0823456789",
"Rina": "0834567890",
"Ahmad": "0845678901",
};
var result = users.keys
.where((name) => name.length == 4)
.toList();
print(result);
}
Output:
[John, Budi, Rina]
Kenapa menggunakan users.keys?
Ini sangat penting.
Map memiliki:
key → value
Misalnya:
John → 0812345678
Budi → 0823456789
Kalau kita ingin mencari key, kita mengambil:
users.keys
Kemudian baru menggunakan:
.where(...)
Jadi:
users.keys.where(...)
Artinya:
Ambil semua key dari Map, kemudian filter key tersebut.
name.length == 4
Bagian:
name.length == 4
berarti:
Apakah panjang nama sama dengan 4?
Contoh:
"John".length
hasil:
4
Sedangkan:
"Ahmad".length
hasil:
5
Maka:
John → 4 → true ✅
Budi → 4 → true ✅
Rina → 4 → true ✅
Ahmad → 5 → false ❌
🔥 Hal penting: where() pada Map
Ini sering membingungkan pemula.
Kita tidak menulis:
users.where(...)
karena Map tidak menyediakan where() secara langsung seperti List.
Sebagai gantinya kita bisa memilih bagian Map yang ingin difilter:
users.keys.where(...)
atau:
users.values.where(...)
atau:
users.entries.where(...)
Kalau ingin filter berdasarkan key
Gunakan:
users.keys.where(...)
Kalau ingin filter berdasarkan value
Gunakan:
users.values.where(...)
Kalau ingin filter berdasarkan key DAN value
Gunakan:
users.entries.where(...)
Contoh:
users.entries.where(
(entry) => entry.key.length == 4
);
Di sini:
entry.key
adalah key.
Sedangkan:
entry.value
adalah value.
🧠 Ringkasan 7 soal
| No | Materi | Yang diuji |
|---|---|---|
| 1 | List | Membuat List + loop |
| 2 | Set | Membuat Set + loop |
| 3 | List + Input | Input user + add() + total |
| 4 | List | List kosong + add() |
| 5 | List | where() + startsWith() |
| 6 | Map | Membuat + update + forEach() |
| 7 | Map | keys + where() + length |
🎯 Cara berpikir untuk mengerjakan soal-soal ini
Daripada menghafalkan kode, biasakan bertanya:
Pertanyaan 1 — Data apa yang digunakan?
Misalnya:
nama → List
buah → Set
pengeluaran → List
data orang → Map
Pertanyaan 2 — Apa yang diminta dilakukan?
print → print()
tambahkan → add()
cari/filter → where()
update → map[key] = value
hitung → loop + operator
Pertanyaan 3 — Apakah perlu loop?
Kalau ingin memproses semua data:
for (var item in collection) {
...
}
Pertanyaan 4 — Apakah perlu filter?
Kalau soal mengatakan:
“cari yang…”
“temukan yang…”
“hanya yang…”
Biasanya kamu bisa berpikir:
where()
🧩 Pola besar yang harus kamu kuasai
Sebenarnya 7 soal ini bisa diringkas menjadi beberapa pola.
Pattern 1 — List + loop
List<String> names = ["Budi", "Andi"];
for (String name in names) {
print(name);
}
Pattern 2 — Set + loop
Set<String> fruits = {"Apple", "Mango"};
for (String fruit in fruits) {
print(fruit);
}
Pattern 3 — List + add()
List<String> items = [];
items.add("A");
items.add("B");
Pattern 4 — Filter List
var result = items
.where((item) => condition)
.toList();
Pattern 5 — Map update
map["key"] = newValue;
Pattern 6 — Filter Map berdasarkan key
var result = map.keys
.where((key) => condition)
.toList();
⭐ Yang paling penting dari latihan ini
Kalau kamu memahami 7 soal ini, berarti kamu sudah mulai menggabungkan materi-materi sebelumnya, bukan hanya mempelajarinya secara terpisah.
Alurnya:
LIST
├── add()
├── loop
└── where()
SET
└── loop
MAP
├── key/value
├── update
├── forEach()
└── keys + where()
INPUT
└── stdin
Jadi latihan ini sebenarnya bukan tentang menulis kode panjang. Tujuannya adalah belajar memilih collection dan method yang tepat berdasarkan kebutuhan soal.
Kalau ada soal:
“Saya punya banyak data dan ingin mencari hanya data yang memenuhi syarat.”
Langsung mulai berpikir:
"Filter?"
↓
where()
Kalau:
“Saya punya data key → value.”
Pikirkan:
Map
Kalau:
“Saya hanya ingin data unik.”
Pikirkan:
Set
Kalau:
“Saya punya kumpulan data yang berurutan dan bisa punya duplikat.”
Pikirkan:
List
Itulah inti besar dari latihan Chapter 4 ini.