मुझे आज एक वरिष्ठ डेवलपर से एक कोड की समीक्षा मिली, जिसमें पूछा गया कि "स्विच स्टेटमेंट के माध्यम से फ़ंक्शंस भेजने में आपकी क्या आपत्ति है?" मैंने कई स्थानों पर पढ़ा है कि कैसे कॉल करने के तरीकों पर स्विच के माध्यम से एक तर्क को खराब करना ओओपी है, जितना एक्स्टेंसिबल नहीं है, आदि। हालांकि, मैं वास्तव में उसके लिए निश्चित उत्तर नहीं दे सकता। मैं एक बार और सभी के लिए इसे निपटाना चाहूंगा।
यहां हमारे प्रतिस्पर्धी कोड सुझाव दिए गए हैं (उदाहरण के रूप में उपयोग किया जाने वाला php, लेकिन अधिक सार्वभौमिक रूप से लागू किया जा सकता है):
class Switch {
public function go($arg) {
switch ($arg) {
case "one":
echo "one\n";
break;
case "two":
echo "two\n";
break;
case "three":
echo "three\n";
break;
default:
throw new Exception("Unknown call: $arg");
break;
}
}
}
class Oop {
public function go_one() {
echo "one\n";
}
public function go_two() {
echo "two\n";
}
public function go_three() {
echo "three\n";
}
public function __call($_, $__) {
throw new Exception("Unknown call $_ with arguments: " . print_r($__, true));
}
}
उनके तर्क का एक हिस्सा था "यह (स्विच विधि) सामान्य मामलों में आपके पास सामान्य मामलों की तुलना में बहुत अधिक स्वच्छ तरीका है, जो कि __call () जादू पद्धति में है।"
मैं स्वच्छता के बारे में असहमत हूं और वास्तव में कॉल को प्राथमिकता देता हूं, लेकिन मैं यह सुनना चाहता हूं कि दूसरों को क्या कहना है।
तर्क मैं Oop
योजना के समर्थन में आ सकता हूं :
- कोड के संदर्भ में थोड़ा क्लीनर आपको लिखना होगा (कम, पढ़ने में आसान, विचार करने के लिए कम कीवर्ड)
- सभी कार्य एक ही विधि को नहीं सौंपे गए। यहां निष्पादन में बहुत अंतर नहीं है, लेकिन कम से कम पाठ को अधिक कंपार्टमेंट किया गया है।
- एक ही नस में, एक विशिष्ट विधि के बजाय कक्षा में कहीं भी एक और विधि जोड़ी जा सकती है।
- तरीके नामांकित हैं, जो अच्छा है।
- यहां लागू नहीं होता है, लेकिन एक मामले पर विचार करें जहां
Switch::go()
पैरामीटर के बजाय एक सदस्य पर संचालित होता है। आपको पहले सदस्य को बदलना होगा, फिर विधि को कॉल करना होगा। के लिएOop
आप किसी भी समय स्वतंत्र रूप से तरीकों कॉल कर सकते हैं।
तर्क मैं Switch
योजना के समर्थन में आ सकता हूं :
- तर्क के लिए, डिफ़ॉल्ट (अज्ञात) अनुरोध से निपटने की क्लीनर विधि
- कम जादुई लगता है, जिससे अपरिचित डेवलपर्स अधिक सहज महसूस कर सकते हैं
किसी को भी किसी भी पक्ष के लिए जोड़ने के लिए कुछ भी है? मैं उसके लिए एक अच्छा जवाब देना चाहता हूं।
Oop
प्रत्येक विधि का वर्णन करने के लिए phpdoc रखने की अनुमति देता है, जिसे कुछ आईडीई (जैसे, नेटबीन्स) द्वारा पार्स किया जा सकता है।