फंक्शन कोड का एक व्यवस्थित और दोबारा इस्तेमाल किए जा सकने वाला ब्लॉक है, जिसे कोई काम करने के लिए इस्तेमाल किया जाता है। JavaScript में फंक्शन बनाने के कई तरीके हैं। यहाँ हम फंक्शन डिक्लरेशन और फंक्शन एक्सप्रेशन देखेंगे। अन्य संभावनाएँ, जैसे ऐरो फंक्शन, दूसरे कॉन्सेप्ट में बताई जाएँगी।
JavaScript में फंक्शन बनाने का मानक तरीका फंक्शन डिक्लरेशन है, जिसे फंक्शन की परिभाषा या फंक्शन स्टेटमेंट भी कहा जाता है।
इसमें function कीवर्ड, फंक्शन का नाम, और गोल ब्रैकेट में कॉमा से अलग किए गए पैरामीटर की सूची होती है।
इसके बाद फंक्शन बॉडी आती है (उन स्टेटमेंट का समूह जो तय करते हैं कि फंक्शन क्या करता है), जिसे कर्ली ब्रैकेट में लिखा जाता है।
function someName(param1, param2, param3) {
// ...
}
JavaScript में फंक्शन को कॉल करने के लिए उसका नाम लिखा जाता है और उसके बाद गोल ब्रैकेट लगाए जाते हैं, जिनमें आर्गुमेंट होते हैं।
someName(arg1, arg2, arg3);
फंक्शन बॉडी के अंदर पैरामीटर के साथ काम करते समय संभावित साइड इफेक्ट के बारे में ध्यान रखिए।
JavaScript में डिफॉल्ट रूप से, फंक्शन डिक्लरेशन में बनाए गए सभी पैरामीटर वैकल्पिक होते हैं।
अगर आप उतने आर्गुमेंट नहीं देते जितने पैरामीटर हैं, तो फंक्शन के अंदर वे छूटे हुए आर्गुमेंट undefined होंगे। देखिए Null and Undefined।
कई मामलों में, undefined के बजाय कोई ज़्यादा उपयुक्त डिफॉल्ट वैल्यू असाइन करना ठीक रहता है।
यह फंक्शन की परिभाषा में सीधे डिफॉल्ट पैरामीटर देकर किया जा सकता है।
function someName(param1 = defaultValue1, param2 = defaultValue2) {
// ...
}
return स्टेटमेंटreturn स्टेटमेंट फंक्शन का निष्पादन समाप्त करता है और बताता है कि फंक्शन को कॉल करने वाले को कौन-सी वैल्यू लौटाई जानी है। एक फंक्शन में कई return स्टेटमेंट हो सकते हैं।
function checkNumber(num) {
if (num === 0) {
return 'You passed 0, please provide another number.';
}
return 'Thanks for passing such a nice number.';
}
फंक्शन की रिटर्न वैल्यू को एक वेरिएबल में रखा जा सकता है।
function sum(x, y) {
return x + y;
}
const total = sum(5, 10);
// => 15
जो फंक्शन कोई वैल्यू return नहीं करता या जिसमें return स्टेटमेंट नहीं है, उसका परिणाम undefined होता है।
JavaScript में कोई अंतर्निहित return नहीं होता।
function nakedReturn(a) {
a * 2;
return;
}
nakedReturn(1);
// => undefined
function noReturn(a) {
a * 2;
}
noReturn(1);
// => undefined
JavaScript में आप केवल एक ही वैल्यू लौटा सकते हैं। अगर आपको ज़्यादा जानकारी देनी है, तो पहले उसे एक चीज़ में मिलाना पड़ेगा, आम तौर पर किसी ऑब्जेक्ट या ऐरे में।
function divide(a, b) {
return {
quotient: Math.floor(a / b),
remainder: a % b,
};
}
फंक्शन डिक्लरेशन एक अलग स्टेटमेंट होता है। लेकिन कभी-कभी फंक्शन को किसी दूसरे एक्सप्रेशन के हिस्से के रूप में बनाना काम आता है, जैसे किसी असाइनमेंट में, फंक्शन के पैरामीटर के रूप में (कॉलबैक), या किसी ऑब्जेक्ट की वैल्यू के रूप में। यह फंक्शन एक्सप्रेशन से किया जा सकता है। इसका सिंटैक्स फंक्शन डिक्लरेशन जैसा ही होता है, बस फंक्शन का नाम हटाया जा सकता है, जिससे एक अनाम फंक्शन बनता है।
const someFunction = function (param) {
// ...
};
someOtherFunction(function (param) {
// ...
});
const obj = {
someFunction: function (param) {
// ...
},
};
इस अभ्यास में आप अपनी पसंदीदा कुकबुक की बेहतरीन लसान्या तैयार करने और पकाने से जुड़ा कुछ और कोड लिखेंगे।
आपके पास पाँच काम हैं। पहला काम पकाने से जुड़ा है, और बाकी चार बढ़िया तैयारी के बारे में हैं।
जब लसान्या ओवन में होता है, तो आप जानना चाहते हैं कि उसे अब बाहर निकाल सकते हैं या नहीं। लसान्या ओवन में न जले, इसके लिए आप आमतौर पर एक टाइमर लगाते हैं। लेकिन कभी-कभी आप यह करना भूल जाते हैं।
एक फंक्शन cookingStatus लिखिए जो पैरामीटर के तौर पर टाइमर में बचा हुआ समय मिनटों में लेता है।
इस फंक्शन के तीन संभावित परिणाम हो सकते हैं।
0 दिखाता है, तो यह 'Lasagna is done.' लौटाता है.'Not done, please wait.' होना चाहिए.'You forgot to set the timer.' होना चाहिए.टाइमर कभी भी 0 से कम वैल्यू नहीं दिखाएगा।
cookingStatus(12);
// => 'Not done, please wait.'
cookingStatus();
// => 'You forgot to set the timer.'
अगली बार जो लसान्या आप बनाएँगे, उसके लिए आप यह सुनिश्चित करना चाहते हैं कि पकाने का मज़ा लेने लायक पर्याप्त समय आपने निकाल रखा हो। आपने पहले ही योजना बना ली है कि आपकी लसान्या में कौन-कौन सी परतें होंगी। अब आप उसी के आधार पर अंदाज़ा लगाना चाहते हैं कि तैयारी में कितना समय लगेगा।
एक फंक्शन preparationTime बनाइए जो परतों का एक ऐरे और हर परत के लिए औसत तैयारी समय मिनटों में लेता है।
फंक्शन को परतों की संख्या के आधार पर कुल तैयारी समय का अनुमान लौटाना चाहिए।
अगर फंक्शन को औसत तैयारी समय दिए बिना कॉल किया जाता है, तो 2 मिनट मान लिए जाने चाहिए।
const layers = ['sauce', 'noodles', 'sauce', 'meat', 'mozzarella', 'noodles'];
preparationTime(layers, 3);
// => 18
preparationTime(layers);
// => 12
समय निकालने के अलावा, आप यह भी सुनिश्चित करना चाहते हैं कि सपनों वाली लसान्या पकाने के लिए आपके पास पर्याप्त सॉस और नूडल्स हों। आपकी लसान्या में नूडल्स की हर परत के लिए 50 ग्राम नूडल्स चाहिए होंगे। सॉस की हर परत के लिए 0.2 लीटर सॉस चाहिए होगा।
फंक्शन quantities बनाइए जो पैरामीटर के तौर पर परतों का एक ऐरे लेता है।
इसके बाद फंक्शन यह तय करेगा कि आपका खाना बनाने के लिए कितने नूडल्स और कितना सॉस चाहिए।
परिणाम को noodles और sauce कीज़ वाले एक ऑब्जेक्ट के रूप में लौटाना चाहिए।
quantities(['sauce', 'noodles', 'sauce', 'meat', 'mozzarella', 'noodles']);
// => { noodles: 100, sauce: 0.4 }
कुछ समय पहले आप एक दोस्त के घर गए और वहाँ लसान्या खाया। वह बहुत शानदार था और उसमें कुछ खास था। दोस्त ने आपको सामग्री की सूची भेजी और बताया कि सूची की अंतिम चीज़ ही वह "गुप्त सामग्री" है जिसने खाने को इतना खास बनाया। अब आप उस गुप्त सामग्री को अपनी रेसिपी में भी जोड़ना चाहते हैं।
एक फंक्शन addSecretIngredient लिखिए जो पैरामीटर के तौर पर सामग्री के दो ऐरे लेता है।
पहला पैरामीटर वह सूची है जो आपके दोस्त ने भेजी थी, और दूसरा आपकी अपनी रेसिपी की सामग्री सूची है।
फंक्शन को अपने दोस्त की सूची की अंतिम चीज़ आपकी सूची के अंत में जोड़नी चाहिए।
जो ऐरे आपकी रेसिपी दर्शाता है, उसे सीधे बदला जाना चाहिए, और फंक्शन को कुछ भी नहीं लौटाना चाहिए।
लेकिन पहला आर्गुमेंट नहीं बदलना चाहिए।
const friendsList = ['noodles', 'sauce', 'mozzarella', 'kampot pepper'];
const myList = ['noodles', 'meat', 'sauce', 'mozzarella'];
addSecretIngredient(friendsList, myList);
// => undefined
console.log(myList);
// => ['noodles', 'meat', 'sauce', 'mozzarella', 'kampot pepper']
आपकी कुकबुक में दी गई मात्राओं से सिर्फ दो हिस्सों की लसान्या बनती है। चूँकि अगली बार आप और लोगों के लिए पकाना चाहते हैं, इसलिए आप अलग-अलग संख्या के हिस्सों के लिए मात्राएँ निकालना चाहते हैं।
एक फंक्शन scaleRecipe बनाइए जो दो पैरामीटर लेता है।
फंक्शन को एक रेसिपी ऑब्जेक्ट लौटाना चाहिए, जिसमें चाही गई संख्या के हिस्सों के लिए ज़रूरी मात्राएँ हों। लेकिन आप मूल रेसिपी बनाए रखना चाहते हैं। इसका मतलब है कि इस काम में रेसिपी वाला आर्गुमेंट नहीं बदलना चाहिए।
const recipe = {
noodles: 200,
sauce: 0.5,
mozzarella: 1,
meat: 100,
};
scaleRecipe(recipe, 4);
// =>
// {
// noodles: 400,
// sauce: 1,
// mozzarella: 2,
// meat: 200,
// };
console.log(recipe);
// =>
// {
// noodles: 200,
// sauce: 0.5,
// mozzarella: 1,
// meat: 100,
// };
Exercism पर साइन अप कीजिए और JavaScript को 37 कॉन्सेप्ट159 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।