स्पष्ट elseब्लॉक
मैं सभी बयानों को कवर करने वाले एक कंबल बयान के रूप में इससे सहमत नहीं हूं, ifलेकिन कई बार ऐसा होता है जब elseआदत से बाहर ब्लॉक जोड़ना अच्छी बात है।
एक ifबयान, मेरे दिमाग में, वास्तव में दो अलग-अलग कार्य शामिल हैं।
अगर हमें कुछ करना है, तो यहां करें।
इस तरह की सामग्री स्पष्ट रूप से एक भाग की जरूरत नहीं है else।
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
और कुछ मामलों में जोड़ने पर जोर देकर elseगुमराह किया जा सकता है।
if (k > n) {
return BigInteger.ZERO;
}
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
के रूप में ही नहीं है
if (k > n) {
return BigInteger.ZERO;
} else {
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
}
भले ही यह कार्यात्मक रूप से समान हो। ifएक खाली के साथ पहला लिखना elseआपको दूसरे परिणाम तक ले जा सकता है जो अनावश्यक रूप से बदसूरत है।
यदि हम एक विशिष्ट स्थिति की जाँच कर रहे हैं, तो elseउस घटना को कवर करने के लिए आपको याद दिलाने के लिए एक खाली जोड़ना अक्सर एक अच्छा विचार है
// 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;
}
}
याद रखें कि ये नियम तभी लागू होते हैं जब आप नया कोड लिख रहे होते हैं । IMHO elseचेकइन से पहले खाली क्लॉस को हटा दिया जाना चाहिए।
के लिए टेस्ट true, के लिए नहींfalse
फिर से यह सामान्य स्तर पर अच्छी सलाह है लेकिन कई मामलों में यह अनावश्यक रूप से जटिल और कम पठनीय होता है।
हालांकि कोड की तरह
if(!customer.canBuyAlcohol()) {
// ...
}
पाठक को परेशान कर रहा है, लेकिन इसे बना रहा है
if(customer.canBuyAlcohol()) {
// Do nothing.
} else {
// ...
}
कम से कम जितना बुरा है, उतना बुरा नहीं है।
मैंने कई साल पहले BCPL में कोडित किया था और उस भाषा में एक IFखंड और एक UNLESSखंड है, ताकि आप अधिक महत्वपूर्ण रूप से कोड कर सकें:
unless(customer.canBuyAlcohol()) {
// ...
}
जो काफी बेहतर है, लेकिन अभी भी सही नहीं है।
मेरी व्यक्तिगत प्रक्रिया
आम तौर पर, जब मैं नया कोड लिख रहा होता हूं, तो अक्सर मुझे याद दिलाने के elseलिए एक ifस्टेटमेंट में एक खाली ब्लॉक जोड़ देता हूं कि मैंने अभी तक उस घटना को कवर नहीं किया है। यह मुझे DFSजाल से बचने में मदद करता है और यह सुनिश्चित करता है कि जब मैं कोड की समीक्षा करता हूं तो मुझे लगता है कि करना बाकी है। हालांकि, मैं आमतौर पर TODOट्रैक रखने के लिए एक टिप्पणी जोड़ता हूं ।
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
मुझे लगता है कि आम तौर पर मैं elseअपने कोड में शायद ही कभी उपयोग करता हूं क्योंकि यह अक्सर कोड गंध का संकेत दे सकता है।