Masukkan Password
17 2.3 Assert in Dart Programming Language | Find Errors in Dart | Learn Dart Language | Dart Course
Kali ini kita membahas assert di Dart. Materinya masih berhubungan dengan kondisi, tetapi fungsinya agak berbeda dari if.
Ada beberapa kesalahan transkripsi di caption, terutama “asset/AET/Asser” yang maksudnya adalah assert.
1. Apa itu assert?
Secara sederhana:
assertdigunakan untuk memastikan bahwa suatu kondisi yang kita anggap benar memang benar-benar terpenuhi saat program berjalan dalam mode development/debug.
Bentuk dasarnya:
assert(condition);
Misalnya:
int age = 18;
assert(age >= 18);
Artinya:
“Saya yakin
ageharus lebih besar atau sama dengan 18. Kalau ternyata tidak, beri tahu saya bahwa ada masalah.”
Kalau:
age = 18
maka:
18 >= 18 → true
Tidak terjadi error.
Tetapi kalau:
int age = 17;
assert(age >= 18);
maka:
17 >= 18 → false
assert akan gagal dan Dart akan memberikan error.
2. Bedanya assert dengan if
Ini sangat penting.
Kita sudah belajar if:
if (age >= 18) {
print("You are an adult");
}
if digunakan untuk:
menentukan apa yang harus dilakukan program berdasarkan kondisi.
Sedangkan:
assert(age >= 18);
lebih seperti:
memastikan asumsi programmer benar.
Jadi tujuan utamanya berbeda.
if
if (condition) {
// lakukan sesuatu
}
Program memang sengaja mengambil keputusan.
assert
assert(condition);
Programmer mengatakan:
“Kondisi ini seharusnya benar. Kalau ternyata salah, berarti ada sesuatu yang perlu saya periksa.”
3. Analogi sederhana
Bayangkan kamu sedang membuat sebuah aplikasi.
Kamu punya aturan:
“Umur yang masuk ke fungsi ini seharusnya tidak boleh di bawah 18.”
Kamu bisa memberi semacam pemeriksaan:
assert(age >= 18);
Seolah-olah kamu mengatakan:
“Hei Dart, saya yakin
ageminimal 18. Kalau ternyata kurang dari 18, beri tahu saya karena ada yang tidak beres.”
Jadi assert seperti satpam untuk memeriksa asumsi programmer.
4. Contoh paling sederhana
void main() {
int age = 18;
assert(age >= 18);
print(age);
}
Urutannya:
age = 18
↓
assert(age >= 18)
↓
18 >= 18
↓
true
↓
lanjut
↓
print(age)
Output:
18
Tidak ada error dari assert.
5. Kalau kondisi false
Sekarang ubah:
void main() {
int age = 17;
assert(age >= 18);
print(age);
}
Diperiksa:
17 >= 18
hasilnya:
false
Maka assert gagal.
Biasanya kamu akan melihat error semacam:
Unhandled exception:
Assertion failed: ...
Artinya:
“Pernyataan yang kamu yakini benar ternyata false.”
6. Kenapa assert berguna?
Bayangkan kamu membuat aplikasi yang sangat besar.
Misalnya terdapat:
1.000 baris kode
atau bahkan:
10.000 baris kode
Ada kemungkinan data yang masuk ke bagian tertentu tidak sesuai dengan yang programmer harapkan.
Daripada hanya menemukan masalah jauh di akhir program, kita bisa memberikan pemeriksaan menggunakan assert.
Contohnya:
assert(age >= 18);
atau:
assert(name.isNotEmpty);
atau:
assert(url.startsWith("https"));
Kalau asumsi tersebut dilanggar saat development, error bisa muncul di lokasi pemeriksaannya.
7. assert menerima kondisi Boolean
Ingat materi sebelumnya tentang kondisi.
Kondisi menghasilkan:
true
atau:
false
Karena itu assert membutuhkan kondisi.
Contoh:
assert(age >= 18);
Bagian:
age >= 18
menghasilkan Boolean.
Misalnya:
20 >= 18 → true
atau:
15 >= 18 → false
8. Bisa menggunakan berbagai kondisi
assert tidak hanya digunakan untuk angka.
Kita bisa menggunakan berbagai ekspresi yang menghasilkan true atau false.
Contoh:
Angka
assert(age >= 18);
String
assert(name.isNotEmpty);
URL
assert(url.startsWith("https"));
List
assert(myList.isNotEmpty);
Perbandingan
assert(a == b);
Logical operator
assert(age >= 18 && isStudent);
Jadi konsep sebelumnya tetap digunakan.
9. assert dengan pesan custom
Video juga menunjukkan bahwa kita bisa memberikan pesan tambahan.
Bentuknya:
assert(condition, "message");
Contoh:
int age = 17;
assert(age >= 18, "Age must be 18 or older");
Kalau kondisi false, pesan tersebut akan membantu kita memahami masalah.
Daripada hanya melihat:
Assertion failed
kita mendapatkan informasi seperti:
Age must be 18 or older
10. Mengapa pesan custom berguna?
Misalnya program kita memiliki banyak assert.
assert(age >= 18, "Age must be at least 18");
assert(name.isNotEmpty, "Name cannot be empty");
assert(score >= 0, "Score cannot be negative");
Kalau salah satu gagal, kita lebih mudah mengetahui asumsi mana yang dilanggar.
Ini sangat membantu ketika debugging.
11. Contoh dengan String
Video memberikan contoh URL.
Misalnya:
String url = "https://google.com";
Kita ingin memastikan URL tersebut dimulai dengan:
https
Kita bisa menggunakan method String:
startsWith()
Contoh:
assert(url.startsWith("https"));
Mari kita lihat.
"https://google.com".startsWith("https")
hasilnya:
true
Jadi assert tidak gagal.
12. Apa itu startsWith()?
startsWith() digunakan untuk memeriksa apakah String diawali dengan teks tertentu.
Contoh:
String text = "Hello World";
print(text.startsWith("Hello"));
Hasil:
true
Karena String dimulai dengan "Hello".
Sedangkan:
print(text.startsWith("World"));
hasilnya:
false
Karena "World" berada di belakang.
13. Contoh assert dengan URL
void main() {
String url = "https://google.com";
assert(
url.startsWith("https"),
"URL must start with https"
);
print(url);
}
Karena:
https://google.com
^^^^^^^^
https
maka kondisi benar.
Program dapat melanjutkan.
14. Kalau URL tidak menggunakan HTTPS
Misalnya:
String url = "http://google.com";
Kemudian:
assert(
url.startsWith("https"),
"URL must start with https"
);
Pemeriksaan menjadi:
"http://google.com".startsWith("https")
Hasil:
false
Maka assert gagal.
Ini membantu programmer mengetahui:
“Ternyata URL yang saya kira menggunakan HTTPS ternyata tidak.”
15. Mengecek akhir String dengan endsWith()
Video juga menggunakan:
endsWith()
Kalau:
String url = "https://google.com";
kita bisa memeriksa apakah URL berakhir dengan:
.com
menggunakan:
assert(url.endsWith(".com"));
16. Apa itu endsWith()?
endsWith() berarti:
“Apakah String ini diakhiri dengan teks tertentu?”
Contoh:
String name = "Ahad";
print(name.endsWith("ad"));
Hasil:
true
Karena:
Ahad
^^
ad
Sedangkan:
print(name.endsWith("Ah"));
hasilnya:
false
Karena "Ah" berada di awal, bukan akhir.
17. Contoh lengkap URL
Kita bisa membuat dua pemeriksaan sekaligus:
void main() {
String url = "https://google.com";
assert(
url.startsWith("https"),
"URL must start with https"
);
assert(
url.endsWith(".com"),
"URL must end with .com"
);
print("URL: $url");
}
Ada dua asumsi:
1. URL harus dimulai dengan https
2. URL harus diakhiri dengan .com
Jika keduanya benar, program lanjut.
18. Bagaimana kalau salah satu kondisi gagal?
Misalnya:
String url = "http://google.com";
Maka:
startsWith("https") → false
assert pertama gagal.
Atau misalnya:
String url = "https://google.org";
Maka:
startsWith("https") → true
endsWith(".com") → false
assert kedua gagal.
19. assert bisa digunakan untuk memeriksa input internal
Misalnya kita memiliki fungsi:
void printAge(int age) {
assert(age >= 0);
print("Age: $age");
}
Kemudian:
void main() {
printAge(20);
}
Tidak masalah.
Tetapi:
printAge(-5);
akan membuat assert gagal dalam mode yang mendukung assertion.
Artinya programmer sedang mengatakan:
“Fungsi
printAge()mengharapkan umur tidak negatif.”
20. Contoh lain: memeriksa nama
void greet(String name) {
assert(name.isNotEmpty, "Name cannot be empty");
print("Hello $name");
}
Kalau:
greet("Ahad");
aman.
Tetapi:
greet("");
maka:
name.isNotEmpty
bernilai:
false
sehingga assertion gagal.
21. assert bukan pengganti if
Ini adalah salah satu hal paling penting.
Misalnya kamu ingin memberikan pesan kepada user ketika umur kurang dari 18.
Jangan mengandalkan:
assert(age >= 18);
untuk kebutuhan aplikasi seperti itu.
Lebih tepat:
if (age >= 18) {
print("You can continue");
} else {
print("You must be at least 18 years old");
}
Kenapa?
Karena if memang digunakan untuk logika aplikasi.
Sedangkan assert lebih ditujukan untuk memeriksa asumsi/invariant programmer selama development/debugging.
22. Ini perbedaan yang sangat penting
if | assert |
|---|---|
| Untuk logika program | Untuk memeriksa asumsi programmer |
| Menentukan tindakan | Memastikan kondisi seharusnya benar |
| Bisa digunakan untuk menangani kondisi normal | Digunakan terutama saat development/debugging |
| Cocok untuk validasi input user | Bukan mekanisme utama validasi input user |
User mungkin memang menghasilkan kondisi false | false dianggap sebagai indikasi ada masalah/asumsi yang dilanggar |
Contohnya user memasukkan umur:
15
Kalau aplikasi memang memperbolehkan user berusia 15 tahun mengakses halaman tertentu dengan pesan khusus, gunakan:
if (age >= 18) {
...
} else {
...
}
Bukan menjadikan assert sebagai validasi utama.
23. Hal penting: assert terutama untuk development/debugging
Ini bagian yang perlu diluruskan dari video.
Dalam Dart, assertions biasanya aktif dalam mode development/debug, dan tidak diandalkan untuk logika aplikasi production. Dalam mode tertentu seperti production, assertion dapat dinonaktifkan.
Jadi jangan membuat program seperti:
assert(password.isNotEmpty);
lalu berpikir:
“Berarti aplikasi saya selalu aman karena password pasti tidak kosong.”
Tidak demikian.
Kalau sebuah kondisi harus selalu divalidasi ketika aplikasi berjalan, gunakan mekanisme validasi/logika yang memang tetap berlaku, misalnya if, exception, atau validasi input sesuai kebutuhan.
assert lebih cocok untuk membantu programmer menemukan kesalahan selama pengembangan.
24. Contoh perbandingan yang bagus
Menggunakan if
void login(String username, String password) {
if (username.isEmpty || password.isEmpty) {
print("Username and password are required");
return;
}
print("Login process started");
}
Ini adalah logika aplikasi.
User memang bisa saja memasukkan data kosong, sehingga program harus menanganinya.
Menggunakan assert
void processUser(String username) {
assert(username.isNotEmpty, "Username should not be empty");
print("Processing $username");
}
Di sini programmer mengatakan:
“Pada tahap ini, saya menganggap username sudah dipastikan tidak kosong.”
Kalau ternyata kosong saat development, assert membantu menemukan bahwa ada bagian program sebelumnya yang bermasalah.
25. Cara berpikir yang paling mudah
Bayangkan if bertanya:
“Apa yang harus dilakukan kalau kondisi ini benar atau salah?”
Sedangkan assert bertanya:
“Benarkah kondisi yang saya yakini ini terpenuhi?”
Contoh:
if
if (age >= 18) {
print("Adult");
} else {
print("Minor");
}
Artinya:
Kalau dewasa lakukan A, kalau tidak lakukan B.
assert
assert(age >= 18);
Artinya:
Saya mengharapkan umur minimal 18. Kalau ternyata tidak, ada sesuatu yang perlu diperiksa.
26. Alur kerja assert
Bayangkan kode:
assert(age >= 18, "Age must be 18 or older");
Dart secara konsep melakukan:
Apakah age >= 18?
│
┌───┴───┐
│ │
TRUE FALSE
│ │
↓ ↓
lanjut assertion
gagal
Jadi:
Jika true
Program melanjutkan.
Jika false
Assertion gagal dan informasi error diberikan.
27. Menggabungkan dengan materi sebelumnya
Materi ini sebenarnya menggabungkan banyak hal yang sudah kita pelajari.
Misalnya:
String url = "https://google.com";
assert(
url.startsWith("https") &&
url.endsWith(".com"),
"Invalid URL format"
);
Di sini ada:
String
String url
Method String
startsWith()
endsWith()
Logical operator
&&
Boolean condition
Seluruh ekspresi:
url.startsWith("https") &&
url.endsWith(".com")
menghasilkan true atau false.
Assert
assert(...)
Jadi materi sebelumnya benar-benar mulai dipakai bersama-sama.
28. Contoh program lengkap untuk latihan
Coba lihat program berikut:
void main() {
String name = "Ahad";
int age = 20;
String url = "https://google.com";
assert(name.isNotEmpty, "Name cannot be empty");
assert(age >= 18, "Age must be at least 18");
assert(url.startsWith("https"), "URL must use HTTPS");
assert(url.endsWith(".com"), "URL must end with .com");
print("All checks passed");
}
Jika semua kondisi benar:
All checks passed
Tetapi kalau:
int age = 15;
maka assertion umur akan gagal.
Kalau:
String name = "";
maka assertion nama dapat gagal.
Kalau:
String url = "http://google.com";
maka assertion HTTPS dapat gagal.
29. assert dan error message
Kita bisa membuat pesan yang lebih jelas:
assert(age >= 18, "Age cannot be below 18");
Daripada hanya:
assert(age >= 18);
Untuk latihan dan debugging, pesan custom sangat membantu karena kita langsung tahu maksud pemeriksaannya.
Contoh:
assert(
name.isNotEmpty,
"Name should contain at least one character"
);
atau:
assert(
url.startsWith("https"),
"URL must start with https"
);
30. Kesalahan umum pemula
❌ 1. Mengira assert sama dengan if
Tidak sama.
if (age >= 18) {
...
}
adalah logika program.
assert(age >= 18);
adalah pemeriksaan asumsi.
❌ 2. Menggunakan assert untuk validasi user
Misalnya:
assert(password.isNotEmpty);
Jangan menganggap ini sebagai validasi keamanan aplikasi.
Untuk input user, gunakan validasi yang memang berjalan ketika aplikasi membutuhkan pemeriksaan tersebut.
❌ 3. Mengira assert selalu aktif
Jangan mengandalkan assert untuk sesuatu yang wajib dilakukan aplikasi pada semua mode eksekusi.
Assertion terutama ditujukan untuk development/debugging dan dapat dinonaktifkan pada mode production tertentu.
❌ 4. Lupa bahwa kondisi harus menghasilkan Boolean
Ini benar:
assert(age >= 18);
Karena:
age >= 18
menghasilkan true atau false.
31. Ringkasan super sederhana
Kalau harus mengingat materi ini dengan singkat:
assert= “Saya yakin kondisi ini benar. Kalau ternyata salah, beri tahu saya karena kemungkinan ada bug atau asumsi saya yang salah.”
Format:
assert(condition);
Dengan pesan:
assert(condition, "Error message");
Contoh:
int age = 20;
assert(age >= 18);
String:
String name = "Ahad";
assert(name.isNotEmpty);
URL:
String url = "https://google.com";
assert(url.startsWith("https"));
assert(url.endsWith(".com"));
32. Cheat sheet
| Kode | Fungsi | ||
|---|---|---|---|
assert(condition) | Memastikan kondisi benar | ||
assert(condition, "message") | Memastikan kondisi benar + pesan jika gagal | ||
startsWith() | Mengecek awalan String | ||
endsWith() | Mengecek akhiran String | ||
.isEmpty | Mengecek apakah kosong | ||
.isNotEmpty | Mengecek apakah tidak kosong | ||
&& | Semua kondisi harus benar | ||
| ` | ` | Minimal satu kondisi benar |
Cara mengingat
if
↓
"Kalau kondisi ini terjadi, saya harus melakukan apa?"
assert
↓
"Saya yakin kondisi ini benar. Kalau salah, berarti ada masalah."
Latihan pemahaman
Coba tebak mana yang berhasil dan mana yang menyebabkan assertion gagal:
1.
int age = 20;
assert(age >= 18);
print("Hello");
2.
int age = 15;
assert(age >= 18);
print("Hello");
3.
String name = "Dart";
assert(name.isNotEmpty);
print("Hello");
4.
String url = "http://google.com";
assert(
url.startsWith("https"),
"URL must use HTTPS"
);
5.
String url = "https://google.com";
assert(
url.startsWith("https") &&
url.endsWith(".com")
);
print("Valid URL");
Kalau kamu sudah memahami mengapa masing-masing kondisi menghasilkan true atau false, berarti konsep dasar assert sudah mulai kuat.
Inti terpentingnya: if dipakai untuk mengambil keputusan, sedangkan assert dipakai untuk mengecek apakah asumsi programmer terpenuhi, terutama saat development/debugging.