मैं व्यक्तिगत रूप से विभिन्न प्रोग्रामिंग भाषाओं द्वारा प्रस्तुत "संदर्भ द्वारा पास" कार्यक्षमता को नापसंद करता हूं। शायद ऐसा इसलिए है क्योंकि मैं केवल कार्यात्मक प्रोग्रामिंग की अवधारणाओं की खोज कर रहा हूं, लेकिन मुझे हमेशा गोज़बंप्स मिलते हैं जब मुझे ऐसे कार्य दिखाई देते हैं जो साइड इफेक्ट का कारण बनते हैं (जैसे संदर्भ द्वारा पारित मापदंडों में हेरफेर)। मैं व्यक्तिगत रूप से "एकल जिम्मेदारी" सिद्धांत को दृढ़ता से गले लगाता हूं।
IMHO, एक फ़ंक्शन को रिटर्न कीवर्ड का उपयोग करके केवल एक परिणाम / मान वापस करना चाहिए। एक पैरामीटर / तर्क को संशोधित करने के बजाय, मैं बस संशोधित पैरामीटर / तर्क मान वापस करूंगा और कॉलिंग कोड तक किसी भी वांछित पुनर्मूल्यांकन को छोड़ दूंगा।
लेकिन कभी-कभी (उम्मीद से बहुत कम ही), एक ही फ़ंक्शन से दो या अधिक परिणाम मान वापस करना आवश्यक है। उस स्थिति में, मैं उन सभी परिणामी मूल्यों को एक संरचना या वस्तु में शामिल करने का विकल्प चुनूंगा। फिर से, किसी भी पुन: असाइनमेंट को संसाधित करना कॉलिंग कोड तक होना चाहिए।
उदाहरण:
मान लीजिए कि पासिंग मापदंडों को तर्क सूची में एक विशेष कीवर्ड जैसे 'रेफरी' का उपयोग करके समर्थित किया जाएगा। मेरा कोड कुछ इस तरह दिख सकता है:
//The Function
function doSomething(ref value) {
value = "Bar";
}
//The Calling Code
var value = "Foo";
doSomething(value);
console.log(value); //Bar
इसके बजाय, मैं वास्तव में ऐसा कुछ करना पसंद करूंगा:
//The Function
function doSomething(value) {
value = "Bar";
return value;
}
//The Calling Code:
var value = "Foo";
value = doSomething(value); //Reassignment
console.log(value); //Bar
जब मुझे एक फ़ंक्शन लिखने की आवश्यकता होगी जो कई मान लौटाता है, तो मैं संदर्भ द्वारा पारित मापदंडों का उपयोग नहीं करूंगा। तो मैं इस तरह कोड से बचना होगा:
//The Function
function doSomething(ref value) {
value = "Bar";
//Do other work
var otherValue = "Something else";
return otherValue;
}
//The Calling Code
var value = "Foo";
var otherValue = doSomething(value);
console.log(value); //Bar
console.log(otherValue); //Something else
इसके बजाय, मैं वास्तव में एक वस्तु के अंदर दोनों नए मूल्यों को वापस करना पसंद करूंगा, जैसे:
//The Function
function doSomething(value) {
value = "Bar";
//Do more work
var otherValue = "Something else";
return {
value: value,
otherValue: otherValue
};
}
//The Calling Code:
var value = "Foo";
var result = doSomething(value);
value = result.value; //Reassignment
console.log(value); //Bar
console.log(result.otherValue);
ये कोड उदाहरण काफी सरल हैं, लेकिन यह मोटे तौर पर दर्शाता है कि मैं व्यक्तिगत रूप से इस तरह के सामान को कैसे संभालूंगा। यह मुझे विभिन्न जिम्मेदारियों को सही जगह पर रखने में मदद करता है।
खुश कोडिंग। :)