Iya
Anda harus selalu menggunakan tanda kurung ... Anda tidak mengontrol urutan prioritas ... pengembang kompilator tidak. Ini adalah kisah yang terjadi pada saya tentang tidak menggunakan tanda kurung. Ini mempengaruhi ratusan orang selama periode dua minggu.
Alasan Dunia Nyata
Saya mewarisi aplikasi bingkai utama. Suatu hari, tiba-tiba ia berhenti bekerja. Itu saja ... puf itu baru saja berhenti.
Pekerjaan saya adalah membuatnya bekerja secepat mungkin. Kode sumber belum dimodifikasi selama dua tahun, tetapi tiba-tiba saja berhenti. Saya mencoba untuk mengkompilasi kode dan itu rusak pada baris XX. Saya melihat garis XX dan saya tidak tahu apa yang membuat garis XX putus. Saya meminta spesifikasi terperinci untuk aplikasi ini dan tidak ada. Jalur XX bukan pelakunya.
Saya mencetak kode dan mulai memeriksanya dari atas ke bawah. Saya mulai membuat diagram alur dari apa yang sedang terjadi. Kode itu sangat berbelit-belit sampai saya bahkan tidak bisa memahaminya. Saya menyerah mencoba untuk flowchart itu. Saya takut untuk membuat perubahan tanpa mengetahui bagaimana perubahan itu akan mempengaruhi sisa proses, terutama karena saya tidak punya rincian tentang apa yang dilakukan aplikasi atau di mana itu berada dalam rantai ketergantungan.
Jadi, saya memutuskan untuk mulai di bagian atas kode sumber dan menambahkan whitespce dan rem baris untuk membuat kode lebih mudah dibaca. Saya perhatikan, dalam beberapa kasus, ada jika kondisi yang digabungkan AND
dan OR
dan itu tidak jelas dibedakan antara data apa yang sedang AND
diedit dan data apa yang sedang OR
diedit. Jadi saya mulai meletakkan tanda kurung di sekitar AND
dan OR
kondisi untuk membuatnya lebih mudah dibaca.
Saat saya perlahan-lahan membersihkannya, saya secara berkala akan menyelamatkan pekerjaan saya. Pada satu titik saya mencoba mengkompilasi kode dan hal aneh terjadi. Kesalahan telah melompat melewati baris kode asli dan sekarang lebih jauh ke bawah. Jadi saya melanjutkan, melapangkan AND
dan OR
mengkondisikan orangtua . Ketika saya selesai membersihkannya, itu berhasil. Go Figure.
Saya kemudian memutuskan untuk mengunjungi toko operasi dan bertanya apakah mereka baru saja memasang komponen baru pada kerangka-utama. Mereka berkata ya, kami baru saja meningkatkan kompiler. Hmmmm.
Ternyata kompiler lama mengevaluasi ekspresi dari kiri ke kanan. Versi baru dari kompiler juga mengevaluasi ekspresi dari kiri ke kanan tetapi kode ambigu, yang berarti kombinasi tidak jelas AND
dan OR
tidak dapat diselesaikan.
Pelajaran yang saya pelajari dari ini ... SELALU, SELALU, SELALU menggunakan paren untuk AND
kondisi dan kondisi yang terpisah OR
ketika mereka digunakan bersama satu sama lain.
Contoh Sederhana
IF Product = 191 OR Product = 193 AND Model = "ABC" OR Product = 201 OR Product = 202 AND Model = "DEF" ...
(kode berserakan dengan beberapa di antaranya)
Ini adalah versi sederhana dari apa yang saya temui. Ada kondisi lain dengan pernyataan logika gabungan boolean juga.
Saya ingat pernah membawanya ke:
IF ((Product = 191 OR Product = 193) AND Model = "ABC") OR ((Product = 201 OR Product = 202) AND Model = "DEF") ...
Saya tidak bisa menulis ulang karena tidak ada spesifikasi. Penulis asli sudah lama hilang. Saya ingat tekanan kuat. Seluruh kapal kargo terdampar di pelabuhan dan tidak dapat dimuat karena program kecil ini tidak berfungsi. Tanpa peringatan. Tidak ada perubahan pada kode sumber. Saya baru sadar untuk menanyakan Operasi Jaringan jika mereka memodifikasi apa pun setelah saya perhatikan bahwa menambahkan parens menggeser kesalahan.