Minggu, Mei 03, 2020

Operator ternary pada bahasa C/C++

Perkirakan hasil keluaran dari program C++ berikut ini.


Awalnya diperkirakan hasil keluaran adalah sama pada hasil cetakan statement. Tetapi, hasil keluaran yang diberikan program setelah dijalankan adalah,

First character 1 
Second character 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 tergantung 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 float.


Program berikut 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).


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 memcoba untuk mencetak nilai string pada urutan alamat 0 pada runtime.


Dapat dilakukan observasi pada ekspresi2 yang dipertimbangkan sebagai tipe output dan ekspresi3 akan dikonversi menjadi ekspresi2 pada waktu runtime. Jika konversi adalah implisit maka kompilator akan memasukkan stubs untuk konversi. Jika konversi dinyatakan 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 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.





Related Posts

Operator ternary pada bahasa C/C++
Oleh

mohon untuk melakukan koreksi jika terdapat kesalahan pada penulisan blog ini,