author Ahmad Muhardian

Belajar Pemrograman C #12: Mengenal Tipe Data Enum pada C


Belajar pemrograman C: Mengenal Enum dan Contohnya

Apakah kamu masih ingat dengan pembahasan kita tentang tipe data pada C?

Pada C terdapat beberapa tipe data dasar, void, turunan, dan juga tipe data bentukan atau enum.

Tipe data pada C

Beberapa tipe data turunan sudah pernah kita bahas, silakan dibaca di sini:

Sekarang kita akan membahas tentang enum.

Dimulai dari pembahasan tentang:

Apa sih enum itu?

Bagaimana cara membuatnya?

Mengapa kita harus pakai enum?

Mari kita mulai…

Apa itu Enum?

Enum atau Enumeration merupakan tipe data yang berisi sekumpulan konstanta.

Jadi, dengan Enum.. kita bisa menyimpan beberapa konstanta dalam satu variabel.

Berikut ini cara membuat enum:

Cara membuat enum pada C

Contoh:

enum level {EASY = 1, NORMAL = 2, HARD = 3};
enum sex {MALE, FEMALE};
enum state {PENDING, INPROGRESS, DONE};

Apabila kita tidak mengisi nilai konstanta pada enum…

…maka secara default akan diisi dengan angka yang mengikuti urutan penulisannya.

Contoh:

enum hari {SENIN, SELASA, RABU, KAMIS, JUMAT, SABTU, MINGGU};

Maka konstanta yang ada di dalam enum hari akan bernilai:

SENIN  = 0
SELASA = 1
RABU   = 2
KAMIS  = 3
JUMAT  = 4
SABTU  = 5
MINGGU = 6

Jadi mirip-mirip seperti array ya, tapi bedanya yang di simpan dalam enum bukan variabel.. melainkan konstanta yang nilainya tak bisa kita ubah.

Mengapa sih kita butuh Enum?

Enum memudahkan kita menyimpan beberapa konstanta yang masih dalam satu kelompok ke dalam satu variabel. Sehingga akan membuat kode menjadi gampang dipahami.

Misalnya, kita ingin menyimpan status pesanan.. bisa aja kita buat konstantanya satu-per-satu seperti ini.

const int PENDING   = 1;
const int CANCELED  = -1;
const int PAID      = 2;
const int SHIPPING  = 3;
const int DELIVERED = 4;

Tapi kalau nanti kita sudah banyak pakai konstanta dengan nama yang sama, maka kita akan bingung membacanya.

Karena itu, konstanta yang masih satu kelompok.. baiknya ditaruh dalam satu tempat supaya mudah.

Sehingga kita bisa buat enum seperti ini:

enum OrderStatus = { PENDING, CANCELLED = -1, PAID, SHIPPING, DELIVERED };

Lalu, kita bisa pakai dengan cara seperti ini:

OrderStatus status = PENDING;

Sekarang mari kita coba latihan.

Membuat Program dengan Enum

Sekarang mari kita coba membuat sebuah program dengan enum.

Silakan buat program baru bernama contoh_enum.c, kemudian isi dengan kode berikut.

#include <stdio.h>

enum hari {SENIN, SELASA, RABU, KAMIS, JUMAT, SABTU, MINGGU};

void main() {
    enum hari sekarang;
    sekarang = RABU;
    printf("Sekarang hari ke-%d", sekarang + 1);
}

Setelah itu, coba jalankan…

Maka hasilnya:

Contoh program dengan enum

Membuat Tipe Data Boolean dari Enum

Bahasa pemrograman C tidak memiliki tipe data boolean seperti bahasa pemrograman lain.

Namun…

Kita bisa membuatnya sendiri.

Pada bahasa C, nilai true akan sama dengan 1 dan false sama dengan 0.

Maka kita bisa membuat enum untuk boolean seperti ini:

enum boolean {false, true};

Mari kita coba dalam program…

Buatlah program baru bernama contoh_boolean.c, kemudian isi dengan kode berikut:

#include <stdio.h>

enum boolean {false, true};

void main() {
    int a = 4;
    int b = 5;

    if(a < b == true){
        printf("variabel a lebih kecil dari b\n");
    }
}

Hasilnya:

Contoh program dengan tipe data boolean pada C

Menggunakan Enum Sebagai Flags

Flags artinya bendera, kalau dalam pemrograman.. Flags ini bisa diartikan sebagai penanda atau marker.

Contoh kasusnya:

Misalnya kita ingin membuat program hak akses, maka kita bisa buat flag: READ, WRITE, DELETE.

Nantinya, data yang kita kasi flag tersebut akan bisa mengakses sesuai flag yang kita berikan.

Mari kita coba buat dalam latihan!

Buatlah file baru dengan nama enum_flag.c kemudian isi dengan kode berikut:

#include <stdio.h>

int main() {
    enum Permission { READ = 1, WRITE = 2, DELETE = 4};
    int balance = 0;

    // set flags dengan operasi bitwise or
    enum Permission userPermission = READ | WRITE;

    if(userPermission & WRITE){
        printf("Anda dibolehkan mengisi saldo\n");
        balance += 100;
    }

    printf("Saldo: %i\n", balance);

    return 0;
}

Setelah itu, coba compile dan jalankan.

Maka hasilnya:

Enum sebagai flag

Perhatikan!

Pada contoh kasus ini kita mengisi nilai flag READ=1, WRITE=2, dan DELETE=4.

Mengapa diisi begitu?

Ini supaya kalau diubah menjadi biner dengan operasi bitwise OR (|), binernya tidak bentrok. Ingat, operasi bitwise itu operasi yang dilakukan berdasarkan biner.

Misalnya:

READ | WRITE

Kalau dalam biner:

READ    = 0001;
WRITE   = 0010;

// maka
READ | WRITE = 0011;

Oke,sekarang coba ubah userPermission.

Kita hapus flag WRITE, maka sekarang binernya akan menjadi 0001.

Enum sebagai flag

Sehingga kodenya menjadi seperti ini:

#include <stdio.h>

int main() {
    enum Permission { READ = 1, WRITE = 2, DELETE = 4};
    int balance = 0;

    // set flags dengan operasi bitwise or
    enum Permission userPermission = READ;

    if(userPermission & WRITE){
        printf("Anda dibolehkan mengisi saldo\n");
        balance += 100;
    }

    printf("Saldo: %i\n", balance);

    return 0;
}

Lalu coba compile dan jalankan lagi.

Maka hasilnya:

Hasil enum setelah hapus flag Write

Saldonya tidak berubah, ini karena kita tidak berikan flag WRITE pada variabel userPermission.

Sehingga pada saat operasi userPermission & WRITE akan menghasilkan false.

Apa Selanjutnya?

Kita sudah belajar dasar-dasar tentang enum, selanjutnya silakan pelajari tentang: