1 फ़ंक्शन अवधारणाएँ

प्रोग्रामिंग में, फ़ंक्शन एक कोड का टुकड़ा है जो एक विशिष्ट कार्य को पूरा करता है और इनपुट पैरामीटर और रिटर्न मान संभावित होते हैं। गो भाषा में, फ़ंक्शन कोड को संगठित और पुनर्उपयोग के लिए व्यापक रूप से प्रयोग किया जाता है। फ़ंक्शन का प्रभावी रूप से उपयोग करना कोड को संक्षेपित, पठनीयतम और संरचित रखने में सहायक हो सकता है।

फ़ंक्शन गो भाषा का एक मौलिक घटक है, और फ़ंक्शन को कैसे घोषित और परिभाषित करना है, यह लिखने के प्रभावी और पठनीय कोड के लिए महत्वपूर्ण है।

2 फ़ंक्शन की परिभाषा

2.1 फ़ंक्शन घोषणा

गो भाषा में, फ़ंक्शन घोषणा का सामान्य रूप है:

func functionName(parameters) returnType {
    // फ़ंक्शन बॉडी
}

चलो इन घटकों को विस्तार से समझें:

  1. func कीवर्ड का इस्तेमाल फ़ंक्शन को घोषित करने के लिए किया जाता है।
  2. functionName फ़ंक्शन का नाम है, जो गो भाषा की नामनियों का पालन करता है। महत्वपूर्ण बात, शीर्षक में दी गई अक्षर है, तो इसका अधिकारी होगा, अर्थात यह पैकेज के बाहर दिखाई देगा; शीर्षक में दी गई अक्षर छोटे में है, तो यह अधिकारी नहीं होगा और केवल उसी पैकेज में प्रयोग किया जा सकता है।
  3. parameters फ़ंक्शन द्वारा प्राप्त किए जाने वाले पैरामीटरों की सूची है, जिन्हें अल्पविराम से अलग किया जाता है। प्रत्येक पैरामीटर का प्रकार निर्दिष्ट किया जाना चाहिए, और अगर कई पैरामीटरों का एक ही प्रकार है, तो प्रकार को केवल एक बार निर्दिष्ट किया जा सकता है।
  4. returnType फ़ंक्शन के रिटर्न मान का प्रकार है। अगर फ़ंक्शन कोई मान नहीं लौटाता है, तो इस भाग को छोड़ दिया जा सकता है। यदि फ़ंक्शन दो या दो से अधिक मान लौटाता है, तो वे कोष्ठक में बंद किए जाने चाहिए।

उदाहरण के तौर पर, हम दो पूर्णांकों के योग की गणना करने के लिए एक सरल फ़ंक्शन की घोषणा कर सकते हैं:

func Add(a int, b int) int {
    return a + b
}

इस उदाहरण में, फ़ंक्शन का नाम Add है, इसके दो पैरामीटर हैं जो कि प्रकार int हैं (a और b), और यह उनका योग लौटाता है जिसका रिटर्न प्रकार int है।

2.2 पैरामीटर सूची

पैरामीटर सूची परिभाषित करती है कि कौन कौन से पैरामीटर वाला फ़ंक्शन स्वीकार करता है और हर पैरामीटर का प्रकार। पैरामीटर एक ऐसा विशेष प्रकार का चर है जो फ़ंक्शन को डेटा पारित करने के लिए प्रयोग किया जाता है।

func Greet(name string, age int) {
    fmt.Printf("नमस्ते, %s! आप %d वर्ष के हैं।\n", name, age)
}

इस Greet फ़ंक्शन में, name और age पैरामीटर हैं। name का प्रकार string है, और age का प्रकार int है। इस फ़ंक्शन को बुलाने के लिए, इन पैरामीटरों के लिए वास्तविक मान प्रदान किए जाने चाहिए।

2.3 रिटर्न प्रकार

फ़ंक्शन निर्धारित परिणाम लौटा सकते हैं, और रिटर्न प्रकार फ़ंक्शन के लौटाए जाने वाले मान के डेटा प्रकार को निर्धारित करता है। फ़ंक्शन का कोई रिटर्न मान नहीं हो सकता, या यह एक या एक से अधिक रिटर्न प्राप्त कर सकती हैं।

अगर किसी फ़ंक्शन के पास कई रिटर्न मान होते हैं, तो उनके प्रकार को घोषणा के समय वक्रकों में बंद किया जाना चाहिए:

func Divide(dividend, divisor float64) (float64, error) {
    if divisor == 0 {
        return 0, errors.New("शून्य द्वारा विभाजित नहीं किया जा सकता")
    }
    return dividend / divisor, nil
}

यहाँ Divide फ़ंक्शन दो मान लौटाता है: भाग और एक त्रुटि संदेश। अगर विभाजक शून्य है, तो एक त्रुटि लौटाई जाती है।

2.4 वेरिएडिक पैरामीटर

गोलांग में, जब हम निश्चित नहीं होते हैं कि प्रोक्षक कितने पैरामीटर देगा जब एक फ़ंक्शन की परिभाषा कर रहे हैं, तो हम वेरिएडिक पैरामीटर का इस्तेमाल कर सकते हैं। वेरिएडिक पैरामीटरों को ellipsis ... द्वारा निर्दिष्ट किया जा सकता है, जिसका मतलब होता है कि फ़ंक्शन किसी भी संख्या के पैरामीटरों को स्वीकार कर सकता है। यह जबरदस्त तरीके से उपयोगी होता है जब किसी अनिश्चित मात्रा के डेटा का परिवर्तन करना है या किसी विशेष प्रकार के फ़ंक्शनों को अमल करने के लिए

अनुप्रयोग के क्षेत्र

वेरिएडिक पैरामीटर आम तौर पर निम्नलिखित क्षेत्रों में प्रयोग किया जाता है:

  1. स्ट्रिंग संयोजन: जैसे fmt.Sprintf और strings.Join जैसे फ़ंक्शनों में।
  2. एरे/स्लाइस प्रसंस्करण: जब लम्बाई विभिन्न होती है, तो ऐसे फ़ंक्शनों को अमल करने के लिए जैसे कि योग करने या विभिन्न स्लाइसों को संयोजित करने के लिए।
  3. लॉगिंग और त्रुटि संसाधन: जब विभिन्न त्रुटियों का सामना कर रहे होते हैं या विभिन्न लॉग सूचना को रिकॉर्ड कर रहे होते हैं जैसे कि log.Printf या अनुकूलित त्रुटि सारांश फ़ंक्शनों को इम्प्लीमेंट करने के लिए।
  4. सहायक फ़ंक्शनें: एपीआई या पुस्तकालय में उपयोग के लिए, उपयोगकर्ताओं को फ़ंक्शन को बुलाने के अधिक लचीले तरीके प्रदान करने के लिए।

चरण 3: फ़ंक्शन को कॉल करना

3.1 मूल फ़ंक्शन कॉल

फ़ंक्शन को कॉल करना मतलब फ़ंक्शन के कोड को निष्पादित करना। Go में, किसी परिभाषित फ़ंक्शन को कॉल करना बहुत सरल है, बस फ़ंक्शन का नाम उपयुक्त पैरामीटरों के साथ पास करें। उदाहरण के लिए:

result := add(3, 4)
fmt.Println(result)  // आउटपुट: 7

इस उदाहरण में, add फ़ंक्शन को कॉल किया गया है और दो पूर्णांक पैरामीटर के रूप में पास किए गए हैं, और फिर वापसी गई परिणाम को result चर में स्टोर किया गया है।

3.2 पैरामीटर पास करना

जब फ़ंक्शन को पैरामीटर पास किया जाता है, Go डिफ़ॉल्ट रूप से मान के रूप में पास करने का उपयोग करता है, जिसका मतलब है पैरामीटर मूल्य की एक प्रतिलिपि को पास करना, और मूल डेटा बदला नहीं जाएगा। हालांकि, अगर आप चाहते हैं कि फ़ंक्शन अद्भुत बेरोजगारी के लिए बाह्य चरों को संशोधित करें या प्रदर्शन की वजह से, तो आप पॉइंटर्ज या बड़े संरचनाओं को पास करने जैसे पास-by-रेफरेंस का उपयोग कर सकते हैं।

यहां पास-by-वैल्यू और पास-by-रेफरेंस के उदाहरण हैं:

// पास-by-वैल्यू का उदाहरण
func double(val int) {
    val *= 2
}

// पास-by-रेफरेंस का उदाहरण
func doublePtr(val *int) {
    *val *= 2
}

func main() {
    value := 3
    double(value)
    fmt.Println(value)  // आउटपुट 3, मूल्य अपरिवर्तित रहता है

    doublePtr(&value)
    fmt.Println(value)  // आउटपुट 6, मूल्य दोगुना हो गया है
}

उपरोक्त उदाहरण में, double फ़ंक्शन ने पारित val को दोगुना करने की कोशिश की, लेकिन वह केवल उसकी प्रतिलिपि को दोगुना करती है, मूल value चर अपरिवर्तित रह जाता है। हालांकि, doublePtr फ़ंक्शन ने एक पूर्णांक चर में होने वाले परिवर्तन का उपयोग करके मूल्य को बदल दिया है।