Masukkan Password
21 Switch case in Dart | Dart & Flutter switch case | Dart Tutorial #20
Video ini membahas switch-case di Dart, yaitu salah satu cara melakukan decision making / percabangan selain if, else if, dan else.
Kalau if-else cocok untuk mengecek kondisi, switch sangat nyaman ketika kita ingin membandingkan satu nilai dengan beberapa kemungkinan nilai.
1. Apa itu switch-case?
Secara sederhana, switch bisa dibaca:
“Nilai ini cocok dengan pilihan yang mana?”
Misalnya kita punya kode warna:
r → Red
g → Green
b → Blue
Daripada menulis:
if (colorCode == 'r') {
print("Red");
} else if (colorCode == 'g') {
print("Green");
} else if (colorCode == 'b') {
print("Blue");
} else {
print("Other color");
}
kita bisa menggunakan switch:
switch (colorCode) {
case 'r':
print("Red");
break;
case 'g':
print("Green");
break;
case 'b':
print("Blue");
break;
default:
print("Other color");
}
Secara visual:
colorCode
↓
┌───────┐
│ r │ → Red
├───────┤
│ g │ → Green
├───────┤
│ b │ → Blue
├───────┤
│ other │ → Other color
└───────┘
2. Struktur dasar switch
Bentuk klasik yang dijelaskan video adalah:
switch (expression) {
case value1:
// statement
break;
case value2:
// statement
break;
case value3:
// statement
break;
default:
// statement
}
Mari kita pahami satu per satu.
3. switch (expression)
Contoh:
switch (colorCode) {
colorCode disebut expression yang akan diperiksa.
Misalnya:
String colorCode = 'g';
Maka:
switch (colorCode)
berarti:
“Saya ingin memeriksa nilai yang ada di
colorCode.”
Nilainya saat ini:
'g'
4. case
case adalah pilihan yang akan dibandingkan dengan expression.
Contoh:
case 'r':
Artinya:
“Apakah nilai
colorCodeadalah'r'?”
Kemudian:
case 'g':
berarti:
“Apakah nilainya
'g'?”
Dan:
case 'b':
berarti:
“Apakah nilainya
'b'?”
5. Contoh lengkap
String colorCode = 'g';
switch (colorCode) {
case 'r':
print("Red");
break;
case 'g':
print("Green");
break;
case 'b':
print("Blue");
break;
default:
print("Other color");
}
Dart akan melakukan kira-kira seperti ini:
colorCode = 'g'
Apakah 'g' == 'r'?
↓
tidak
Apakah 'g' == 'g'?
↓
YA
↓
print("Green")
↓
selesai
Output:
Green
6. Apa fungsi break?
Ini bagian yang cukup penting untuk memahami switch klasik Dart.
Contoh:
case 'g':
print("Green");
break;
break berarti:
“Sudah selesai dengan switch. Keluar dari switch sekarang.”
Jadi setelah:
print("Green");
Dart keluar dari switch.
7. Kalau colorCode = 'b'?
Misalnya:
String colorCode = 'b';
Dart memeriksa:
'b' == 'r' → false
'b' == 'g' → false
'b' == 'b' → true
Maka:
print("Blue");
dijalankan.
Output:
Blue
8. Bagaimana kalau tidak ada yang cocok?
Misalnya:
String colorCode = 'x';
Tidak ada:
'r'
'g'
'b'
yang cocok.
Maka kalau kita mempunyai:
default:
print("Other color");
hasilnya:
Other color
9. Apa itu default?
default dapat dianggap sebagai:
“Kalau tidak ada
caseyang cocok, lakukan ini.”
Misalnya:
switch (colorCode) {
case 'r':
print("Red");
break;
case 'g':
print("Green");
break;
case 'b':
print("Blue");
break;
default:
print("Other color");
}
Kalau:
r → Red
g → Green
b → Blue
x → Other color
z → Other color
1 → Other color
10. Apakah default wajib?
Tidak.
default bersifat optional.
Misalnya:
String colorCode = 'x';
switch (colorCode) {
case 'r':
print("Red");
break;
case 'g':
print("Green");
break;
case 'b':
print("Blue");
break;
}
Ini tetap valid.
Kalau colorCode adalah 'x', tidak ada yang dijalankan.
Jadi:
Ada yang cocok?
↓
YA → jalankan case
TIDAK → ada default?
↓
YA → jalankan default
TIDAK → tidak melakukan apa-apa
11. case harus mempunyai nilai yang unik
Misalnya:
switch (colorCode) {
case 'r':
print("Red");
break;
case 'r':
print("Another Red");
break;
}
Ini tidak boleh.
Kenapa?
Karena Dart akan bingung:
colorCode == 'r'
↓
case r yang pertama?
atau
case r yang kedua?
Secara konsep, satu nilai tidak boleh memiliki dua case yang sama dalam switch yang sama.
Jadi:
'r' → satu case
'g' → satu case
'b' → satu case
12. Tipe case harus sesuai
Misalnya:
String colorCode = 'r';
switch (colorCode) {
case 'r':
print("Red");
break;
}
Ini masuk akal karena:
expression → String
case → String
Tetapi jangan membuat:
int colorCode = 10;
switch (colorCode) {
case 'r':
print("Red");
break;
}
Karena kita membandingkan:
int
dengan:
String
Tidak cocok.
Contoh yang benar:
int number = 10;
switch (number) {
case 10:
print("Ten");
break;
case 20:
print("Twenty");
break;
}
13. case menggunakan nilai konstan
Transcript juga menjelaskan bahwa nilai pada case harus berupa constant pattern/value yang valid untuk switch.
Contoh:
case 'r':
atau:
case 10:
atau:
case true:
Nilainya diketahui secara statis.
Misalnya kita punya:
String code = 'r';
Kemudian:
switch (colorCode) {
case code:
print("Red");
break;
}
Ini tidak bisa dipakai seperti itu karena code merupakan variabel biasa, bukan constant.
Kalau memang nilainya ingin dijadikan constant:
const String code = 'r';
maka penggunaannya dapat berbeda sesuai bentuk/pattern switch yang digunakan.
Untuk pemula, paling aman pahami aturan sederhananya:
Nilai
caseharus berupa nilai/pattern yang dapat ditentukan secara konstan, bukan variabel biasa yang nilainya bisa berubah.
14. Banyak case bisa menghasilkan aksi yang sama
Ini salah satu fitur yang menarik.
Misalnya kita ingin menerima:
'r' → Red
'R' → Red
Kita tidak perlu menulis dua blok berbeda.
Dalam bentuk switch klasik:
switch (colorCode) {
case 'r':
case 'R':
print("Red");
break;
case 'g':
case 'G':
print("Green");
break;
case 'b':
case 'B':
print("Blue");
break;
}
Perhatikan:
case 'r':
case 'R':
print("Red");
break;
Tidak ada statement setelah case 'r':.
Akibatnya kedua case tersebut menuju ke aksi yang sama.
15. Apa yang terjadi dengan case tanpa statement?
Misalnya:
case 'r':
case 'R':
print("Red");
break;
Kalau:
colorCode = 'r'
maka akan sampai ke:
print("Red");
Kalau:
colorCode = 'R'
juga sampai ke:
print("Red");
Jadi kita bisa mengelompokkan beberapa kemungkinan.
Visualisasinya:
'r' ──┐
├──→ "Red"
'R' ──┘
Ini berguna kalau beberapa input harus menghasilkan tindakan yang sama.
16. Penting: jangan menganggap break selalu diperlukan di Dart modern
Ada sedikit konteks historis di transcript yang perlu kamu pahami.
Video tersebut menggunakan gaya switch klasik, di mana:
case 'r':
print("Red");
break;
break digunakan untuk menghentikan case.
Namun Dart modern sudah memiliki enhanced switch/pattern matching, sehingga syntax dan aturan switch sekarang jauh lebih kaya. Kamu akan sering menemukan bentuk modern seperti:
switch (value) {
case 1:
print("One");
case 2:
print("Two");
default:
print("Other");
}
dan switch expression:
final result = switch (value) {
1 => "One",
2 => "Two",
_ => "Other",
};
Jadi jangan menghafalkan bahwa:
“Setiap
switchDart modern selalu wajib menggunakanbreak.”
Untuk kode Dart modern, aturan switch sudah berkembang dari model klasik yang dijelaskan video.
17. Switch expression — penting untuk Dart modern
Ini adalah perkembangan Dart yang bagus untuk kamu ketahui.
Selain switch sebagai statement, Dart modern juga mendukung switch expression.
Contoh:
int day = 1;
final dayName = switch (day) {
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
4 => "Thursday",
5 => "Friday",
6 => "Saturday",
7 => "Sunday",
_ => "Invalid day",
};
print(dayName);
Hasil:
Monday
Perhatikan:
final dayName = switch (day) {
Artinya switch menghasilkan sebuah nilai.
Ini berbeda dengan:
switch (day) {
case 1:
print("Monday");
break;
}
yang digunakan sebagai statement.
18. Apa arti _ pada switch modern?
Dalam pattern matching Dart,:
_
dapat dibaca sederhana sebagai:
“apa pun yang belum cocok dengan pattern sebelumnya.”
Misalnya:
final result = switch (number) {
1 => "One",
2 => "Two",
_ => "Other",
};
Kalau:
number = 1 → One
number = 2 → Two
number = 99 → Other
_ di sini memainkan peran yang mirip dengan default pada switch klasik.
19. Contoh Day Number
Contoh yang ada di transcript sangat cocok untuk switch.
Klasik:
int day = 3;
switch (day) {
case 1:
print("Monday");
break;
case 2:
print("Tuesday");
break;
case 3:
print("Wednesday");
break;
case 4:
print("Thursday");
break;
case 5:
print("Friday");
break;
case 6:
print("Saturday");
break;
case 7:
print("Sunday");
break;
default:
print("Invalid day");
}
Karena:
day = 3
maka:
3 == 1 → false
3 == 2 → false
3 == 3 → true
Output:
Wednesday
20. Dengan switch expression modern
Kode yang sama bisa dibuat lebih ringkas:
int day = 3;
final dayName = switch (day) {
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
4 => "Thursday",
5 => "Friday",
6 => "Saturday",
7 => "Sunday",
_ => "Invalid day",
};
print(dayName);
Hasil:
Wednesday
Untuk Dart/Flutter modern, bentuk seperti ini penting untuk kamu kenal.
21. Switch vs if-else
Sekarang pertanyaannya:
Kapan menggunakan
if-else, dan kapan menggunakanswitch?
Gunakan if-else ketika kondisi berupa perbandingan/logika
Contoh:
if (age >= 18) {
print("Adult");
} else {
print("Minor");
}
Atau:
if (score >= 90) {
print("A");
} else if (score >= 80) {
print("B");
}
Karena kita melakukan perbandingan seperti:
>=
<
&&
||
Gunakan switch ketika satu nilai memiliki banyak kemungkinan yang jelas
Contoh:
switch (day) {
case 1:
print("Monday");
break;
case 2:
print("Tuesday");
break;
case 3:
print("Wednesday");
break;
}
Ini sangat mudah dibaca:
day = 1 → Monday
day = 2 → Tuesday
day = 3 → Wednesday
22. Analogi sederhana
Bayangkan kamu pergi ke kasir dan mendapatkan nomor antrean.
Nomor = 3
Petugas memiliki beberapa pilihan:
1 → Loket A
2 → Loket B
3 → Loket C
4 → Loket D
switch seperti petugas mengatakan:
Nomor kamu berapa?
1?
→ Loket A
2?
→ Loket B
3?
→ Loket C
4?
→ Loket D
Selain itu?
→ Nomor tidak valid
Itulah cara berpikir switch.
23. Switch dengan enum
Ini salah satu penggunaan yang sangat bagus di Flutter.
Misalnya:
enum Status {
loading,
success,
error,
}
Kemudian:
Status status = Status.loading;
Kita bisa menggunakan:
switch (status) {
case Status.loading:
print("Loading...");
break;
case Status.success:
print("Success");
break;
case Status.error:
print("Error");
break;
}
Ini jauh lebih aman dan mudah dibaca daripada menggunakan String seperti:
"loading"
"success"
"error"
24. Kenapa enum + switch sangat berguna di Flutter?
Misalnya ketika mengambil data dari API:
loading
↓
success
↓
error
UI bisa menyesuaikan:
Status.loading
↓
CircularProgressIndicator
Status.success
↓
Tampilkan data
Status.error
↓
Tampilkan error
Dengan switch:
switch (status) {
case Status.loading:
return CircularProgressIndicator();
case Status.success:
return Text("Data berhasil");
case Status.error:
return Text("Terjadi kesalahan");
}
Ini pola yang sangat umum dalam Flutter.
25. Switch modern bahkan bisa melakukan pattern matching
Dart modern tidak hanya bisa:
case 1:
case 2:
case "hello":
tetapi juga mempunyai pattern matching yang jauh lebih powerful.
Contohnya secara sederhana:
final message = switch (value) {
int n when n > 0 => "Angka positif",
int n when n < 0 => "Angka negatif",
0 => "Nol",
_ => "Bukan angka yang dimaksud",
};
Jadi switch di Dart modern bukan hanya alternatif if-else.
Ia menjadi salah satu fitur penting untuk pattern matching.
Untuk level pemula, kamu belum perlu menghafal bagian ini. Fokus dulu pada:
switch
case
default
dan kemudian pelajari switch expression/pattern setelah dasar-dasarnya kuat.
26. Poin-poin penting dari video
Mari kita rangkum isi video satu per satu.
① switch adalah multi-way decision making
Artinya kita memiliki banyak pilihan:
1 → A
2 → B
3 → C
4 → D
② expression
Nilai yang ingin diperiksa:
switch (colorCode)
③ case
Pilihan yang dibandingkan:
case 'r':
④ default
Pilihan ketika tidak ada case yang cocok:
default:
Tidak wajib pada switch klasik.
⑤ Case harus unik
Jangan:
case 'r':
case 'r':
⑥ Tipe harus kompatibel
Misalnya:
String color = "red";
maka case harus berupa nilai/pattern yang cocok untuk String.
⑦ Bisa mengelompokkan case
Misalnya:
case 'r':
case 'R':
print("Red");
break;
Kedua input menghasilkan tindakan yang sama.
27. Hal yang perlu kamu hati-hati dari transcript
Ada beberapa bagian video yang berasal dari gaya Dart yang lebih lama.
Yang paling penting:
Video mengajarkan break sebagai bagian utama switch klasik
Benar untuk switch statement klasik yang diajarkan dalam video.
Tetapi Dart modern memiliki:
- switch statement yang lebih kaya,
- switch expression,
- pattern matching,
=>,_,- guards seperti
when.
Jadi ketika nanti kamu melihat tutorial Dart terbaru dan menemukan:
final result = switch (value) {
1 => "One",
2 => "Two",
_ => "Other",
};
jangan bingung.
Itu adalah perkembangan syntax switch modern Dart.
28. Perbandingan if-else dan switch
| Situasi | Lebih cocok | ||
|---|---|---|---|
age >= 18 | if | ||
score >= 90 | if / else if | ||
day == 1, day == 2, dst. | switch | ||
| Status enum | switch | ||
| Banyak nilai pasti | switch | ||
Kondisi kompleks dengan &&, ` | ` | if | |
| Pattern matching | switch modern |
29. Cara mengingat switch
Gunakan kalimat ini:
“Saya punya satu nilai. Nilai ini termasuk pilihan yang mana?”
Contoh:
String role = "admin";
Kemudian:
switch (role) {
case "admin":
print("Admin");
break;
case "user":
print("User");
break;
case "guest":
print("Guest");
break;
default:
print("Unknown role");
}
Cara membacanya:
role apa?
↓
admin → Admin
user → User
guest → Guest
lainnya → Unknown role
Itulah inti dari switch-case.
30. Cheat sheet
Switch klasik
switch (value) {
case 1:
print("One");
break;
case 2:
print("Two");
break;
default:
print("Other");
}
Beberapa case → satu aksi
switch (color) {
case 'r':
case 'R':
print("Red");
break;
}
Switch expression modern
final result = switch (value) {
1 => "One",
2 => "Two",
_ => "Other",
};
Kesimpulan
Kalau if-else kamu bisa bayangkan sebagai:
“Apakah kondisi ini benar?”
maka switch bisa kamu bayangkan sebagai:
“Nilai ini cocok dengan pilihan yang mana?”
Struktur dasarnya:
switch
↓
expression
↓
case 1 → aksi 1
case 2 → aksi 2
case 3 → aksi 3
↓
default → aksi jika tidak ada yang cocok
Dan untuk perjalanan belajar Flutter kamu, urutannya bagus kalau dipahami seperti ini:
if
↓
if-else
↓
else-if
↓
nested if
↓
switch-case
↓
enum + switch
↓
switch expression
↓
pattern matching
Kalau if/else dan switch sudah kamu pahami, kamu sudah punya fondasi penting untuk membuat UI Flutter yang berbeda berdasarkan kondisi, misalnya menampilkan loading, data, error, status login, role user, dan berbagai state aplikasi.