Langsung ke konten utama

Operator Ternary pada Bahasa C dan C++

Artikel ini akan menjelaskan tentang operator ternary yang terdapat pada bahasa pemrograman C dan C++. Sebelum lanjut, perkirakan hasil keluaran dari program C++ berikut ini terlebih dahulu.

#include <iostream> 

using namespace std; 

 

int main() 

int test = 0

cout << "Karakter pertama " 

<< '1' << endl; 

cout << "Karakter kedua " 

<< (test ? 3 : '1') << endl; 

 

return 0

}


Awalnya diperkirakan hasil keluaran adalah sama seperti pada hasil cetakan statement. Tetapi, hasil keluaran yang muncul pada program setelah program tersebut dijalankan adalah;

Karakter pertama 1 
Karakter kedua 49 

Kenapa statement kedua mencetak nilai 49? 
untuk lebih memahami hal tersebut perhatikan penjelasan tentang operator ternary.

Operator ternary pada bahasa C/C++
Operator ternary memiliki format sebagai berikut

ekspresi1 ? ekspresi2 : ekspresi3

Nilai dari ekspresi1 akan selalu dievaluasi nilainya. Eksekusi dari ekspresi2 dan ekspresi3 bergantung pada nilai keluaran dari ekspresi1. Jika ekspresi1 bernilai tidak nol maka ekspresi dua tidak akan dievaluasi, jika tidak, maka ekspresi3 akan dievaluasi.

Dampak pada program:
Dampak dari ekspresi1 akan selalu dievaluasi dan akan memperbarui data secepatnya sebelum proses eksekusi ekspresi2 dan ekspresi3. Dengan kata lain, tidak ada sequence point setelah evaluasi dari kondisi pada ekspresi ternary. Namun jika ekspresi2 dan ekspresi3 memiliki dampak, maka hanya salah satu ekspresi saja yang akan dievaluasi.


Tipe return:
Fakta lain terkait operator ternary adalah operator tersebut memiliki nilai return. Tipe return bergantung pada ekspresi2, dan convertibility dari ekspresi3 ke ekspresi2 untuk setiap aturan konversi overloaded. Jika tidak bisa dilakukan konversi, maka kompilator akan memberikan nilai error. Perhatikan contoh berikut ini,

Kompilasi program berikut ini tidak akan mengalami error jika dilakukan kompilasi. Tipe return dari ekspresi ternary diperkirakan adalah float (seperti ekspresi2) dan ekspresi2 (dengan kata lain tipe integer) yang secara implisit dapat dikonversi ketipe data float.

#include <iostream> 

using namespace std; 

 

int main() 

int test = 0

float fvalue = 3.111f

cout << (test ? fvalue : 0) << endl; 

 

return 0

}


Program berikut ini bersifat tidak kompatibel karena kompilator tidak dapat menemukan tipe return dari ekspresi ternary atau konversi implisit yang tersedia antara ekspresi2 (char array) dan eskpresi3 (tipe integer).

#include <iostream> 

using namespace std; 

 

int main() 

int test = 0

cout << test ? "Sebuah string" : 0 << endl; 

 

return 0

}


Program selanjutnya mungkin dapat dilakukan kompilasi tapi akan mengalami gagal proses pada saat runtime. Tipe return dari ekspresi ternary terikat untuk tipe char*, namun ekspresi akan mengembalikan tipe nilai berupa integer, sehingga menyebabkan program gagal bekerja. Pada dasarnya program mencoba untuk mencetak nilai string pada urutan alamat 0 pada runtime.

#include <iostream> 

using namespace std; 

 

int main() 

int test = 0

cout << (test ? "Sebuah"

" string" : 0) << endl; 

 

return 0

}


Dapat dilakukan observasi pada ekspresi2 yang dipertimbangkan sebagai tipe output dan ekspresi3 akan dikonversi menjadi ekspresi2 pada waktu runtime. Jika konversi sifatnya adalah implisit, maka kompilator akan memasukkan stubs untuk konversi. Namun, Jika konversi sifatnya adalah eksplisit maka kompilator akan memberikan nilai error. Jika kompilator apapun meleset untuk menangkap error tersebut, maka program akan gagal bekerja pada saat runtime.

Tips
Merupakan kelebihan dari sistem yang dikembangkan dalam C++ untuk menghindari beberapa macam bug yang terdapat pada program. Pastikan ekspresi dari ekspresi2 dan ekspresi3 memberikan tipe sama atau setidaknya memiliki tipe konversi yang sama. Seperti sebuah ungkapan, bahwa C++ mengkonversi union untuk konversi yang aman.

Komentar

  1. Apa yang dimaksud dengan operator ternary dalam bahasa pemrograman C?

    BalasHapus
    Balasan
    1. Operator ternary adalah operator yang membutuhkan tiga argumen dalam proses eksekusinya. Dimana, argumen pertama adalah argumen perbandingan, argumen kedua adalah argumen hasil dari perbandingan jika argumen pertama bernilai TRUE atau benar, dan argumen ketiga adalah hasil dari perbandingan jika argumen pertama bernilai FALSE atau salah. Operator ternary adalah salah satu alternatif untuk melakukan efisiensi penulisan dari operator IF dan Else dalam bahasa pemrograman C.

      Hapus
  2. Kenapa disebut dengan nama operator ternary?

    BalasHapus
    Balasan
    1. Nama ternary yang digunakan pada operator ternary adalah diambil dari fakta bahw operator tersebut membutuhkan tiga buah operan dalam proses pengeksekusiannya. Operator ternary adalah bentuk sebuah eskpresi, dimana setelah ekspresi tersebut dieksekusi maka akan langsung memberikan sebuah keputusan nilai baik itu bersifat TRUE ataupun FALSE.

      Hapus
  3. Operator ternary adalah operator yang terdapat pada beberapa bahasa pemrograman, salah satunya adalah bahasa pemrograman C, yang dalam pengoperasiannya membutuhkan tiga buah operand. Operator ini digunakan sebagai alternatif dari penggunaan operator IF Else.

    BalasHapus

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D