elseBlok eksplisit
Saya tidak setuju dengan ini sebagai pernyataan selimut yang mencakup semua ifpernyataan tetapi ada kalanya menambahkan elsekebiasaan karena kebiasaan adalah hal yang baik.
Sebuah ifpernyataan, pikiran saya, sebenarnya mencakup dua fungsi yang berbeda.
Jika kita seharusnya melakukan sesuatu, lakukan di sini.
Hal-hal seperti ini jelas tidak membutuhkan elsebagian.
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
dan dalam beberapa kasus bersikeras menambahkan elsekekuatan yang menyesatkan.
if (k > n) {
return BigInteger.ZERO;
}
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
adalah tidak sama dengan
if (k > n) {
return BigInteger.ZERO;
} else {
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
}
meskipun secara fungsional sama. Menulis yang pertama ifdengan kosong elsedapat membawa Anda ke hasil kedua yang tidak perlu jelek.
Jika kami memeriksa keadaan tertentu, sering kali merupakan ide bagus untuk menambahkan yang kosong elsehanya untuk mengingatkan Anda untuk menutupi kemungkinan itu
// Count wins/losses.
if (doors[firstChoice] == Prize.Car) {
// We would have won without switching!
winWhenNotSwitched += 1;
} else {
// We win if we switched to the car!
if (doors[secondChoice] == Prize.Car) {
// We picked right!
winWhenSwitched += 1;
} else {
// Bad choice.
lost += 1;
}
}
Ingatlah bahwa aturan ini hanya berlaku ketika Anda menulis kode baru . IMHO elseKlausa kosong harus dihapus sebelum checkin.
Tes untuk true, bukan untukfalse
Sekali lagi ini adalah saran yang baik pada tingkat umum tetapi dalam banyak kasus ini membuat kode tidak perlu rumit dan kurang dapat dibaca.
Meskipun suka kode
if(!customer.canBuyAlcohol()) {
// ...
}
mengguncang pembaca, tetapi membuatnya
if(customer.canBuyAlcohol()) {
// Do nothing.
} else {
// ...
}
setidaknya sama buruknya, jika tidak lebih buruk.
Aku dikodekan dalam BCPL bertahun-tahun lalu dan dalam bahasa yang ada IFklausul dan sebuah UNLESSklausul sehingga Anda bisa kode jauh lebih readably sebagai:
unless(customer.canBuyAlcohol()) {
// ...
}
yang secara signifikan lebih baik, tetapi masih belum sempurna.
Proses pribadi saya
Secara umum, ketika saya menulis kode baru saya akan sering menambahkan elseblok kosong ke ifpernyataan hanya untuk mengingatkan saya bahwa saya belum membahas kemungkinan itu. Ini membantu saya menghindari DFSjebakan dan memastikan bahwa ketika saya meninjau kode saya perhatikan ada banyak hal yang harus dilakukan. Namun, saya biasanya menambahkan TODOkomentar untuk melacak.
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Saya menemukan bahwa secara umum saya elsejarang menggunakan kode saya karena sering dapat menunjukkan bau kode.