else
Blok eksplisit
Saya tidak setuju dengan ini sebagai pernyataan selimut yang mencakup semua if
pernyataan tetapi ada kalanya menambahkan else
kebiasaan karena kebiasaan adalah hal yang baik.
Sebuah if
pernyataan, pikiran saya, sebenarnya mencakup dua fungsi yang berbeda.
Jika kita seharusnya melakukan sesuatu, lakukan di sini.
Hal-hal seperti ini jelas tidak membutuhkan else
bagian.
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
dan dalam beberapa kasus bersikeras menambahkan else
kekuatan 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 if
dengan kosong else
dapat membawa Anda ke hasil kedua yang tidak perlu jelek.
Jika kami memeriksa keadaan tertentu, sering kali merupakan ide bagus untuk menambahkan yang kosong else
hanya 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 else
Klausa 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 IF
klausul dan sebuah UNLESS
klausul 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 else
blok kosong ke if
pernyataan hanya untuk mengingatkan saya bahwa saya belum membahas kemungkinan itu. Ini membantu saya menghindari DFS
jebakan dan memastikan bahwa ketika saya meninjau kode saya perhatikan ada banyak hal yang harus dilakukan. Namun, saya biasanya menambahkan TODO
komentar untuk melacak.
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Saya menemukan bahwa secara umum saya else
jarang menggunakan kode saya karena sering dapat menunjukkan bau kode.