Tugasan Boleh Ubah dalam Keadaan Jika: Kes untuk Pertimbangan Berhati-hati
Pengalaman baru-baru ini seorang pengaturcara yang kehilangan masa akibat kesilapan menaip dalam penyataan if menimbulkan persoalan: bilakah mungkin sesuai untuk menetapkan pembolehubah dalam keadaan if?
Pepijat Teraruh Taip: Kisah Berhati-hati
Kesalahan silap yang dipersoalkan melibatkan memberikan nilai satu pembolehubah (b) kepada yang lain (a) dan bukannya membandingkannya untuk kesamaan (==). Kesilapan yang kelihatan kecil ini dengan mudah boleh membawa kepada tingkah laku yang tidak dijangka, menonjolkan keperluan perhatian yang teliti terhadap sintaks pernyataan if.
Amaran dan Ralat Pengkompil: Mengapa Ia Tidak Dicetuskan?
Orang mungkin tertanya-tanya mengapa penyusun tidak memberikan amaran atau ralat dalam kes sedemikian. Jawapannya terletak pada fakta bahawa tugasan pembolehubah dan perbandingan adalah kedua-dua operasi yang sah dalam pernyataan if. Pengkompil boleh mentafsir kod tersebut sebagai sama ada pernyataan tugasan (a = b) diikuti dengan pernyataan if (jika (a)) atau pernyataan if dengan perbandingan (jika (a == b)). Tanpa konteks tambahan, pengkompil tidak dapat menentukan tujuan penyataan yang dimaksudkan.
Kes untuk Pembolehubah Tugasan dalam Keadaan Jika
Walaupun ia secara amnya disyorkan untuk mengelakkan penugasan berubah-ubah jika keadaan disebabkan oleh potensi kekaburan, terdapat kejadian yang jarang berlaku di mana ia boleh dibenarkan. Satu contoh sedemikian timbul apabila menghantar penuding kelas asas secara dinamik kepada penuding kelas terbitan:
<code class="cpp">if (Derived* derived = dynamic_cast<Derived*>(base)) { // do stuff with `derived` }</code>
Dalam senario ini, pengendali tugasan memperuntukkan hasil hantaran dinamik kepada penuding terbitan (diperoleh). Ini membenarkan pelaksanaan kod bersyarat yang memerlukan kefungsian khusus kelas terbitan.
Atas ialah kandungan terperinci Bilakah Sesuai untuk Menetapkan Pembolehubah Di Dalam Keadaan Jika?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!