Catatan pendek didedikasikan kepada semua peminat Star Wars dan Java / JavaRush sempena ulang tahun ke-40 keluaran Episod V saga bintang! Kadang-kadang anda boleh menemui banyak perkara menarik di Internet, dan pada hari yang lain saya terjumpa amalan pengaturcaraan pada pandangan pertama yang agak lucu yang dipanggil syarat Yoda . Ringkasnya, syarat Yoda (juga notasi Yoda) ialah gaya pengaturcaraan di mana dua bahagian ungkapan perbandingan biasa dalam pernyataan bersyarat diterbalikkan:
sembilan enam bahagian Saga, kami, tanpa tidur, duduk untuk menulis beberapa kod untuk projek haiwan kesayangan kami dan menulis perkara berikut:
if (5 == a) {
// do something
}
Gaya ini boleh digunakan dalam bahasa dengan sintaks seperti C, selalunya dalam ungkapan dengan if
dan while
.
if (0 == variable) {
// do something
}
while (false == endingCondition) {
// do something
}
Mengapa mengalihkan ungkapan malar ke sebelah kiri pengendali perbandingan? Mari kita anggap situasi hipotesis di mana, selepas menonton maraton kesemua void checkNumber(int a)
{
if (a = 13) // Здесь-то и появляется так называемый unexpected behavior!
{
printf("Number is 13");
}
}
Dalam kes ini, setiap kali anda menjalankan program, anda akan menerima string Number is 13"
, tanpa mengira hujah yang dihantar а
kepada kaedah checkNumber(int a)
. Ini bukan yang kami jangkakan! Ralat logik boleh berlaku agak kerap di kalangan pengaturcara baru (percayalah, saya TAHU). Tetapi pada peringkat penyusunan, kod seperti 13 = a akan menghasilkan ralat, yang pastinya kita tidak akan terlepas pandang, kerana nilai integer adalah pemalar dan, oleh itu, tidak boleh berubah (berubah menjadi "a").
Terdapat kebaikan dan keburukan untuk menggunakan syarat Yoda.
Bahagian Cahaya:
-
Menghalang penugasan kepada pembolehubah apabila matlamat kita adalah perbandingan.
-
Menyelesaikan masalah "Tingkah Laku Null" yang tidak selamat (
NullPointerException
) // contoh dari Wikipedia
Tanpa Yoda:
String myString = null;
if (myString.equals("foobar")) { /* ... */ }
// This causes a NullPointerException in Java
Dengan Yoda:
String myString = null;
if ( "foobar".equals(myString) ) { // Результат - Ложь
/* не выполняется */
}
Bahagian Gelap:
- Kebolehbacaan kod untuk orang yang akan melihat kod anda menjadi lebih kompleks, meningkatkan beban pada persepsi kod tersebut.
- Skop sempit, hanya perbandingan untuk kesamaan atau perbandingan dengan pemalar digunakan, menyemak nol.
- Ramai penyusun sudah "melihat" ralat seperti ini dan memberi amaran terlebih dahulu tentang kehadiran kemungkinan ralat.
GO TO FULL VERSION