Masukkan Password
63 6.12 What is Enum in Dart OOP | Enum Special Type in Dart Programming | Lear OOP | Dart Course
Pada materi ini, yang dimaksud “enm / enm” adalah enum (enumeration) di Dart. Caption-nya banyak salah transkripsi, jadi saya akan luruskan istilahnya sambil menjelaskan konsepnya dari dasar.
1. Apa itu enum?
enum adalah cara untuk membuat sekumpulan nilai yang sudah ditentukan sebelumnya.
Sederhananya:
enum= daftar pilihan yang nilainya sudah kita tentukan.
Misalnya kita punya gender:
- male
- female
- other
Daripada menggunakan String seperti:
String gender = "male";
kita bisa membuat:
enum Gender {
male,
female,
other,
}
Sekarang Gender menjadi sebuah tipe data khusus yang kita buat sendiri.
2. Kenapa tidak pakai String saja?
Misalnya kita menggunakan String:
String gender = "male";
Masalahnya, programmer bisa saja menulis:
gender = "Male";
gender = "MALE";
gender = "laki-laki";
gender = "cow";
Dart tidak tahu bahwa sebenarnya kita hanya menginginkan:
male
female
other
Dengan enum:
enum Gender {
male,
female,
other,
}
kita membatasi pilihan menjadi nilai-nilai yang memang sudah kita tentukan.
Contoh:
Gender gender = Gender.male;
Tidak bisa sembarangan memasukkan:
Gender gender = "male"; // ❌
Karena "male" adalah String, sedangkan Gender.male adalah nilai dari enum Gender.
3. Cara membuat enum
Syntax dasarnya:
enum NamaEnum {
nilai1,
nilai2,
nilai3,
}
Contoh:
enum Gender {
male,
female,
other,
}
Di sini:
enum
↓
Gender
↓
┌─────────┐
│ male │
│ female │
│ other │
└─────────┘
Gender adalah nama enum.
Sedangkan:
Gender.male
Gender.female
Gender.other
adalah nilai-nilai yang tersedia di dalam enum tersebut.
4. enum harus dibuat di luar function
Ini bagian penting dari video.
Contoh yang benar:
enum Gender {
male,
female,
other,
}
void main() {
print(Gender.male);
}
enum dibuat di luar main().
Secara konsep, enum adalah deklarasi tipe, sama seperti kita mendefinisikan sebuah class.
Jadi jangan membuat:
void main() {
enum Gender { // ❌
male,
female,
other,
}
}
Untuk materi dasar ini, ingat saja:
enumdidefinisikan di level library/top-level, bukan di dalam function.
5. Cara mengakses nilai enum
Misalnya:
enum Gender {
male,
female,
other,
}
Kita bisa menggunakan:
Gender.male
atau:
Gender.female
atau:
Gender.other
Contoh:
void main() {
print(Gender.male);
print(Gender.female);
print(Gender.other);
}
Hasilnya kurang lebih:
Gender.male
Gender.female
Gender.other
Kenapa ada Gender. di depannya?
Karena kita sedang mengatakan:
“Ambil nilai
maledari enumGender.”
Mirip seperti:
ClassName.property
6. Mengambil nama enum dengan .name
Ini bagian yang cukup penting.
Kalau:
print(Gender.male);
hasilnya:
Gender.male
Kalau kita hanya ingin mendapatkan nama:
print(Gender.male.name);
hasil:
male
Jadi:
Gender.male
adalah nilai enum.
Sedangkan:
Gender.male.name
adalah nama dari nilai enum tersebut dalam bentuk String.
Contoh:
print(Gender.male.name);
print(Gender.female.name);
print(Gender.other.name);
Output:
male
female
other
7. Enum juga mempunyai index
Setiap nilai enum memiliki index.
Misalnya:
enum Gender {
male,
female,
other,
}
Urutannya:
male → index 0
female → index 1
other → index 2
Jadi:
print(Gender.male.index);
hasil:
0
Dan:
print(Gender.female.index);
hasil:
1
Sedangkan:
print(Gender.other.index);
hasil:
2
Index dimulai dari 0, sama seperti List.
8. Hubungannya dengan List
Kalau kita punya:
List<String> genders = [
"male",
"female",
"other",
];
index-nya:
index 0 → male
index 1 → female
index 2 → other
Enum juga mempunyai konsep index yang sama:
Gender.male → 0
Gender.female → 1
Gender.other → 2
Tetapi jangan menganggap enum sebagai List.
Enum adalah tipe data khusus, sedangkan List adalah collection.
9. Mengambil semua nilai enum dengan .values
Ini salah satu fitur yang paling berguna.
Misalnya:
enum Gender {
male,
female,
other,
}
Kita bisa mengambil semua nilainya:
print(Gender.values);
Hasilnya kurang lebih:
[Gender.male, Gender.female, Gender.other]
Gender.values berisi seluruh nilai enum dalam bentuk List<Gender>.
Secara konsep:
Gender.values
↓
┌──────────────────────────────┐
│ Gender.male │
│ Gender.female │
│ Gender.other │
└──────────────────────────────┘
10. Loop semua nilai enum
Karena Gender.values merupakan collection, kita bisa melakukan loop.
Contohnya:
for (var gender in Gender.values) {
print(gender);
}
Output:
Gender.male
Gender.female
Gender.other
Kalau hanya ingin namanya:
for (var gender in Gender.values) {
print(gender.name);
}
Output:
male
female
other
Ini sangat berguna ketika kita ingin menampilkan semua pilihan enum.
11. Enum untuk hari
Video juga memberikan contoh Days.
Kita bisa membuat:
enum Days {
sunday,
monday,
tuesday,
wednesday,
thursday,
friday,
saturday,
}
Kemudian:
void main() {
print(Days.sunday);
print(Days.monday);
print(Days.friday);
}
Output:
Days.sunday
Days.monday
Days.friday
Kalau hanya nama:
print(Days.sunday.name);
Output:
sunday
12. Menampilkan semua hari
Kita bisa menggunakan:
for (var day in Days.values) {
print(day.name);
}
Output:
sunday
monday
tuesday
wednesday
thursday
friday
saturday
Jadi pola yang perlu kamu ingat:
NamaEnum.values
digunakan ketika kita ingin mendapatkan semua nilai dalam enum.
13. Kenapa enum berguna?
Bayangkan kita membuat aplikasi restoran.
Status pesanan hanya boleh:
pending
processing
completed
cancelled
Kita bisa membuat:
enum OrderStatus {
pending,
processing,
completed,
cancelled,
}
Kemudian:
OrderStatus status = OrderStatus.pending;
Nanti:
status = OrderStatus.processing;
atau:
status = OrderStatus.completed;
Dengan begitu kode menjadi lebih jelas.
14. Contoh enum tanpa enum
Misalnya kita melakukan ini:
String status = "pending";
Kemudian:
if (status == "pending") {
print("Pesanan sedang menunggu");
}
Tetapi rawan typo:
if (status == "pendding") {
// typo
}
Program tidak otomatis tahu bahwa "pendding" salah.
Dengan enum:
enum OrderStatus {
pending,
processing,
completed,
cancelled,
}
kita menulis:
OrderStatus status = OrderStatus.pending;
Lalu:
if (status == OrderStatus.pending) {
print("Pesanan sedang menunggu");
}
Lebih aman dan lebih jelas.
15. Sekarang hubungkan dengan OOP
Bagian terakhir video sangat penting karena mulai menghubungkan enum dengan class dan object.
Misalnya kita punya:
enum Gender {
male,
female,
other,
}
Kemudian kita membuat class:
class Person {
String name;
Gender gender;
Person(this.name, this.gender);
void display() {
print("Name: $name");
print("Gender: ${gender.name}");
}
}
Perhatikan:
Gender gender;
Artinya property gender bukan String, tetapi bertipe Gender.
16. Membuat object
Sekarang:
Person person = Person(
"Ali",
Gender.male,
);
Mari kita lihat apa yang terjadi.
Constructor:
Person(this.name, this.gender);
membutuhkan dua data:
name
gender
Kita memberikan:
"Ali"
dan:
Gender.male
Sehingga object kita menjadi:
Person
├── name = "Ali"
└── gender = Gender.male
17. Menampilkan data
Kita bisa:
person.display();
Output:
Name: Ali
Gender: male
Kenapa:
${gender.name}
bukan:
$gender
Karena:
$gender
akan menghasilkan sesuatu seperti:
Gender.male
Sedangkan:
${gender.name}
mengambil nama enum saja:
male
18. Contoh program lengkap
Berikut versi yang lebih rapi dari contoh di video:
enum Gender {
male,
female,
other,
}
class Person {
String name;
Gender gender;
Person(this.name, this.gender);
void display() {
print("Name: $name");
print("Gender: ${gender.name}");
}
}
void main() {
Person person = Person(
"Ali",
Gender.male,
);
person.display();
}
Output:
Name: Ali
Gender: male
19. Bisa membuat banyak object
Misalnya:
Person person1 = Person(
"Ali",
Gender.male,
);
Person person2 = Person(
"Aisyah",
Gender.female,
);
Person person3 = Person(
"John",
Gender.other,
);
Kemudian:
person1.display();
person2.display();
person3.display();
Hasil:
Name: Ali
Gender: male
Name: Aisyah
Gender: female
Name: John
Gender: other
Jadi enum sangat cocok ketika sebuah property memiliki pilihan yang terbatas.
20. Contoh lain yang sering ditemukan
Sebenarnya enum tidak hanya untuk gender.
Hari
enum Day {
monday,
tuesday,
wednesday,
thursday,
friday,
saturday,
sunday,
}
Status pesanan
enum OrderStatus {
pending,
processing,
shipped,
delivered,
cancelled,
}
Role user
enum UserRole {
admin,
manager,
user,
guest,
}
Metode pembayaran
enum PaymentMethod {
cash,
bankTransfer,
creditCard,
eWallet,
}
Level game
enum Difficulty {
easy,
medium,
hard,
}
Semua memiliki pola yang sama:
enum
↓
nama tipe
↓
daftar pilihan yang sudah ditentukan
21. enum vs String
Ini perbedaan yang sangat penting.
String | enum |
|---|---|
| Bisa berisi teks apa saja | Hanya nilai yang didefinisikan |
"male" | Gender.male |
"abc" juga bisa | Gender.abc tidak bisa jika tidak didefinisikan |
| Rawan typo | Lebih aman |
| Kurang jelas pilihan yang tersedia | Pilihan terlihat jelas |
Tidak memiliki konsep .index dan .values seperti enum | Memiliki .index, .name, .values |
Misalnya:
String status = "completed";
vs:
OrderStatus status = OrderStatus.completed;
Yang kedua lebih jelas bahwa status memang hanya boleh menggunakan nilai dari OrderStatus.
22. enum vs List
Jangan sampai tertukar.
List
List<String> fruits = [
"Apple",
"Mango",
"Banana",
];
List digunakan untuk menyimpan kumpulan data.
Kita bisa menambahkan:
fruits.add("Orange");
Jadi isi List dapat berubah.
Enum
enum Fruit {
apple,
mango,
banana,
}
Enum digunakan untuk mendefinisikan pilihan/nilai yang menjadi bagian dari suatu tipe.
Bukan untuk menambah atau menghapus item seperti List.
Cara berpikirnya:
List = kumpulan data. Enum = kumpulan pilihan yang sudah ditentukan.
23. Hal penting tentang index
Misalnya:
enum Days {
sunday,
monday,
tuesday,
}
Maka:
Days.sunday.index
→ 0
Days.monday.index
→ 1
Days.tuesday.index
→ 2
Tetapi jangan terlalu bergantung pada index sebagai identitas bisnis.
Misalnya jangan berpikir:
0 = Sunday
1 = Monday
selamanya jika urutan enum bisa diubah.
Kalau urutan diubah:
enum Days {
monday,
sunday,
tuesday,
}
maka index juga berubah.
Jadi .index lebih cocok digunakan ketika memang kita membutuhkan posisi, bukan sebagai ID permanen.
24. Cara mengubah enum menjadi String
Gunakan:
gender.name
Contoh:
Gender gender = Gender.female;
print(gender.name);
Output:
female
Ini sangat berguna misalnya saat ingin menampilkan data kepada user atau membuat data sederhana untuk disimpan.
25. Cara berpikir paling mudah
Bayangkan kamu punya formulir pendaftaran.
Ada pertanyaan:
“Apa role kamu?”
Pilihan hanya:
Admin
Teacher
Student
Guest
Daripada membiarkan programmer memasukkan apa saja:
String role;
kita buat:
enum Role {
admin,
teacher,
student,
guest,
}
Kemudian:
Role role = Role.student;
Sekarang kode secara otomatis menjadi lebih jelas:
Role
│
├── admin
├── teacher
├── student
└── guest
26. enum + switch
Enum juga sangat sering digunakan bersama switch.
Contohnya:
enum OrderStatus {
pending,
processing,
completed,
cancelled,
}
void showStatus(OrderStatus status) {
switch (status) {
case OrderStatus.pending:
print("Pesanan sedang menunggu");
case OrderStatus.processing:
print("Pesanan sedang diproses");
case OrderStatus.completed:
print("Pesanan selesai");
case OrderStatus.cancelled:
print("Pesanan dibatalkan");
}
}
Kemudian:
void main() {
showStatus(OrderStatus.processing);
}
Output:
Pesanan sedang diproses
Ini adalah salah satu penggunaan enum yang sangat umum dalam aplikasi.
27. Kesimpulan besar
Kalau diringkas:
enum
↓
membuat tipe data khusus
↓
berisi sejumlah nilai yang sudah ditentukan
↓
digunakan untuk pilihan yang terbatas
Contoh:
enum Gender {
male,
female,
other,
}
Menggunakan nilai:
Gender.male
Mendapatkan nama:
Gender.male.name
Mendapatkan index:
Gender.male.index
Mendapatkan semua nilai:
Gender.values
Loop semua nilai:
for (var gender in Gender.values) {
print(gender.name);
}
Dan bisa digunakan sebagai property class:
class Person {
String name;
Gender gender;
Person(this.name, this.gender);
}
Kemudian:
Person person = Person(
"Ali",
Gender.male,
);
🧠 Kalimat paling penting untuk diingat
enumdigunakan ketika kita memiliki sekumpulan pilihan yang jumlah dan jenisnya sudah kita tentukan.
Contohnya:
Gender → male, female, other
OrderStatus → pending, processing, completed, cancelled
UserRole → admin, teacher, student, guest
Difficulty → easy, medium, hard
Day → monday, tuesday, ...
Jadi kalau nanti kamu melihat kode seperti:
UserRole.admin
OrderStatus.pending
PaymentMethod.cash
jangan bingung. Itu berarti programmer sedang mengambil nilai tertentu dari sebuah enum.
Saya juga bisa membuat gambar/diagram visual yang menjelaskan alur enum → values → object → class agar lebih mudah diingat.