Tidak sepenuhnya benar bahwa "assert hanya gagal dalam mode debug".
Dalam Konstruksi Perangkat Lunak Berorientasi Objek, Edisi ke-2 oleh Bertrand Meyer, penulis membiarkan pintu terbuka untuk memeriksa prasyarat dalam mode rilis. Dalam kasus tersebut, apa yang terjadi saat pernyataan gagal adalah bahwa ... pengecualian pelanggaran pernyataan dimunculkan! Dalam kasus ini, tidak ada pemulihan dari situasi tersebut: sesuatu yang berguna dapat dilakukan, dan itu adalah untuk secara otomatis menghasilkan laporan kesalahan dan, dalam beberapa kasus, untuk memulai ulang aplikasi.
Motivasi di balik ini adalah bahwa prasyarat biasanya lebih murah untuk diuji daripada invariant dan postconditions, dan bahwa dalam beberapa kasus kebenaran dan "keamanan" dalam rilis build lebih penting daripada kecepatan. yaitu Untuk banyak aplikasi, kecepatan bukanlah masalah, tetapi ketahanan (kemampuan program untuk berperilaku dengan cara yang aman ketika perilakunya tidak benar, yaitu ketika kontrak diputus).
Haruskah Anda selalu membiarkan pemeriksaan prasyarat diaktifkan? Tergantung. Terserah kamu. Tidak ada jawaban universal. Jika Anda membuat perangkat lunak untuk bank, mungkin lebih baik menghentikan eksekusi dengan pesan yang mengkhawatirkan daripada mentransfer $ 1.000.000 daripada $ 1.000. Tetapi bagaimana jika Anda memprogram game? Mungkin Anda membutuhkan semua kecepatan yang bisa Anda dapatkan, dan jika seseorang mendapat 1000 poin, bukan 10 karena bug yang tidak dapat ditangkap prasyaratnya (karena tidak diaktifkan), sial.
Dalam kedua kasus, Anda idealnya telah menangkap bug itu selama pengujian, dan Anda harus melakukan bagian penting dari pengujian Anda dengan pernyataan diaktifkan. Apa yang dibahas di sini adalah kebijakan apa yang terbaik untuk kasus yang jarang terjadi di mana prasyarat gagal dalam kode produksi dalam skenario yang tidak terdeteksi sebelumnya karena pengujian yang tidak lengkap.
Untuk meringkas, Anda dapat memiliki pernyataan dan masih mendapatkan pengecualian secara otomatis , jika Anda membiarkannya diaktifkan - setidaknya di Eiffel. Saya pikir untuk melakukan hal yang sama di C ++ Anda perlu mengetiknya sendiri.
Lihat juga: Kapan pernyataan harus tetap berada dalam kode produksi?