Jika Anda datang ke pemrograman dari latar belakang matematika, detail halus ini dapat dengan mudah menangkap Anda.
C ++ adalah bahasa pemrograman yang banyak digunakan, tetapi juga salah satu kesalahan pemrograman yang paling umum. Banyak dari kesalahan ini disebabkan oleh kesalahan logika. Secara khusus, kesalahan yang dibuat selama operasi perbandingan dapat memengaruhi keakuratan dan keandalan kode Anda.
Bahasa C++ memiliki satu kesalahan perbandingan khusus yang diabaikan oleh banyak pengembang baru. Kesalahan ini diakibatkan oleh pemahaman yang salah tentang cara kerja operator saat melakukan banyak perbandingan. Cari tahu cara menghindari kesalahan umum ini dan mengapa hal itu terjadi sejak awal.
Perbandingan dalam C++
Bahasa pemrograman C++ menawarkan banyak fitur dan alat yang berbeda, bersama dengan operasi dasar seperti operator pembanding. Operator perbandingan adalah operasi khusus dalam bahasa pemrograman yang dapat Anda gunakan untuk membandingkan data satu sama lain. Pengembang cukup sering menggunakan operator ini, terutama saat membuat algoritme.
Anda dapat melihat operator perbandingan dalam banyak contoh berbeda dalam kehidupan sehari-hari. Misalnya, ketika Anda berbelanja di toko kelontong, Anda menggunakan operator ini untuk membandingkan harga. Jika harga satu produk lebih rendah dari yang lain, Anda memilih produk itu.
Anda dapat melihat operator perbandingan di pernyataan if-else cukup sering. Operator perbandingan adalah tempat untuk memeriksa apakah satu nilai lebih besar dari, kurang dari, atau sama dengan nilai lain. Ada detail yang sangat kecil namun penting yang tidak boleh Anda abaikan. Hasil ekspresi perbandingan mengembalikan benar atau salah, yang merupakan nilai boolean. Nilai-nilai ini adalah salah satu komponen dasar dari struktur kontrol dalam pemrograman.
Misalnya, dalam bahasa pemrograman C++, "==" operator memeriksa apakah dua nilai sama. Jika nilainya sama, hasilnya benar. Jika tidak, hasilnya akan salah.
jika (a == b)
{
kembaliBENAR;
}
kalau tidak
{
kembaliPALSU;
}
Contoh Soal Perbandingan
Salah satu kesalahan umum yang dilakukan pemula C++ adalah penggunaan operator pembanding. Operator ini memungkinkan pemrogram untuk membandingkan dua nilai dan melakukan operasi yang berbeda berdasarkan hasil perbandingan tersebut. Namun, menggunakan operator ini secara tidak benar dapat menyebabkan kesalahan yang tidak terduga.
Misalnya, meskipun ekspresi 3 < 15 < 10 salah secara matematis, C++ menganggap hasilnya benar. Anda dapat mendemonstrasikannya dengan menulis program pengujian sederhana berikut.
Pertama, buat file bernama tes.cpp. Buka file ini menggunakan editor kode favorit dan tambahkan kode berikut ke dalamnya.
#termasuk
int a = 15;intutama()
{
jika (3 < sebuah < 10)
{
std::cout << "foo" << std::endl;
}
kalau tidak
{
std::cout << "huuu" << std::endl;
}
kembali0;
}
Anda dapat menggunakan perintah ini untuk mengkompilasi dan menjalankan kode:
g++ uji.cpp -o Uji
Anda sekarang memiliki program yang disebut Tes. Jalankan program dan periksa hasilnya.
C++ menganggap 3 < 15 < 10 benar saat menjalankan program ini. Mengapa hasilnya bisa seperti ini, meskipun itu adalah pernyataan yang salah secara matematis?
Penyebab Masalah Perbandingan di C++
Seperti kebanyakan bahasa pemrograman, C++ membaca kode dari kiri ke kanan. Setiap operator perbandingan menghasilkan nilai boolean. Nilai Boolean tidak hanya berarti benar dan salah; mereka memiliki persamaan matematika.
Prinsip kerja a komputer tergantung pada satu dan nol. Bagi komputer, hasil dari sesuatu bisa benar atau salah. Program komputer biasanya memperlakukan angka 1 sebagai benar dan angka 0 sebagai salah.
Periksa kembali soal perbandingan dan baca pernyataan dari kiri ke kanan; Anda akan melihat bahwa ada dua perbandingan yang berbeda. Perbandingan pertama adalah antara angka 3 dan 15. Ini adalah nilai sebenarnya karena 3 kurang dari 15.
Perbandingan kedua adalah antara hasil itu dan angka 10. Karena perlu melakukan perbandingan numerik, C++ secara diam-diam mengubah nilai sebenarnya boolean menjadi 1. 1 kurang dari 10, jadi hasil keseluruhannya benar.
Kesimpulannya, meskipun ini tampak seperti kekeliruan matematis, pernyataan ini benar untuk C++ dan komputer.
Cara Memecahkan Masalah Perbandingan di C++
C ++, bersama dengan sebagian besar bahasa pemrograman lainnya, menggunakan sintaksis yang berbeda untuk perbandingan logis daripada matematika tradisional. Ekspresi matematis 3 < a < 15 berarti “3 kurang dari a Dan a kurang dari 15.” Namun, seperti yang Anda lihat, C++ menginterpretasikan ekspresi tersebut secara berbeda.
Untuk mewakili dan dalam C++, gunakan operator &&. Anda kemudian dapat menggabungkan ekspresi boolean dan membangun logika menggunakan operator like && untuk mewakili DAN, || untuk mewakili ATAU, dan ! untuk mewakili TIDAK. Bahasa seperti Java menggunakan operator logika yang sama.
Menggunakan operator logika yang benar, Anda dapat memperbaiki bug pada contoh sebelumnya:
#termasuk
int a = 15;intutama()
{
jika (3 < a && a < 10)
{
std::cout << "foo" << std::endl;
}
kalau tidak
{
std::cout << "huuu" << std::endl;
}
kembali0;
}
Sekarang kode ini akan menguji apakah nilai a lebih besar dari 3 dan apakah nilai a kurang dari 10. Kompilasi dan jalankan program dan amati hasilnya.
Contoh sebelumnya mencetak "foo", tetapi program sekarang mencetak "boo", sebagaimana dimaksud. Nilai boolean sisi kiri perbandingan (3 < a) benar. Nilai ruas kanan (a < 10) salah. Sejak benar dan salah selalu PALSU, ekspresi keseluruhan bernilai false, sehingga kondisi gagal dan kalau tidak blok berjalan.
Coba alihkan DAN (&&) operator ke OR (||) dan mengamati hasil yang berbeda.
Pentingnya Pemeriksaan Logis di C++
Perbandingan logis dalam C++ melibatkan penggunaan nilai boolean dan operator perbandingan. Pastikan Anda menggunakan nilai boolean dan operator pembanding yang benar untuk mengontrol pengoperasian program Anda. Sulit untuk menemukan ekspresi yang bentuknya buruk karena C++ akan sering melakukan perilaku yang berbeda daripada gagal sepenuhnya.
Sekarang Anda tahu bagaimana kompiler mengabaikan masalah ini dan memperlakukan setiap perbandingan sebagai boolean saat membaca dari kiri ke kanan. Waspadai masalah ini dalam bahasa apa pun yang Anda gunakan, dan pelajari untuk mengenali efeknya sehingga Anda dapat selangkah lebih maju.