CodeGym /Java Blog /अनियमित /जावा रिटर्न कीवर्ड
John Squirrels
स्तर 41
San Francisco

जावा रिटर्न कीवर्ड

अनियमित ग्रुप में प्रकाशित
जैसा कि हम जानते हैं कि जावा लैंग्वेज एक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग लैंग्वेज है। दूसरे शब्दों में, मौलिक अवधारणा, यानी नींव की नींव, यह है कि सब कुछ एक वस्तु है। वस्तुओं को कक्षाओं का उपयोग करके वर्णित किया गया है। कक्षाएं, बदले में, राज्य और व्यवहार को परिभाषित करती हैं। उदाहरण के लिए, एक बैंक खाते में खाते में राशि के रूप में स्थिति हो सकती है और ऐसे व्यवहार हो सकते हैं जो खाते की शेष राशि को बढ़ाते और घटाते हैं। जावा में, व्यवहार विधियों के माध्यम से कार्यान्वित किए जाते हैं। तरीकों को परिभाषित करना सीखना आपके जावा अध्ययन की शुरुआत में आता है। उदाहरण के लिए, Oracle के आधिकारिक ट्यूटोरियल में, " Defining Methods " शीर्षक के अंतर्गत । यहां ध्यान देने योग्य दो महत्वपूर्ण बातें हैं:
  • प्रत्येक विधि में एक हस्ताक्षर होता है। हस्ताक्षर में विधि का नाम और उसके इनपुट पैरामीटर होते हैं।
  • विधियों के लिए एक वापसी प्रकार निर्दिष्ट किया जाना चाहिए। आप किसी मेथड के रिटर्न टाइप को उसके मेथड डिक्लेरेशन में डिक्लेयर करते हैं।
वापसी का प्रकार विधि हस्ताक्षर का हिस्सा नहीं है। फिर से, यह इस तथ्य का परिणाम है कि जावा एक दृढ़ता से टाइप की जाने वाली भाषा है और संकलक यह जानना चाहता है कि किस प्रकार का उपयोग किया जाता है और कहाँ, अग्रिम में और जितना संभव हो। फिर, यह हमें गलतियों से बचाने के लिए है। मूल रूप से, यह सब एक अच्छे कारण के लिए है। और मुझे ऐसा लगता है कि यह एक बार फिर हमारे अंदर डेटा को संभालने की संस्कृति पैदा करता है। इसलिए, रिटर्न वैल्यू का प्रकार विधियों के लिए निर्दिष्ट है। और जावा में रिटर्न कीवर्ड का उपयोग वास्तव में रिटर्निंग करने के लिए किया जाता है। जावा रिटर्न कीवर्ड - 1

जावा में रिटर्न क्या करता है

रिटर्न कीवर्ड एक कंट्रोल फ्लो स्टेटमेंट है, जैसा कि यहां ओरेकल ट्यूटोरियल में बताया गया है । आप आधिकारिक ट्यूटोरियल के " रीटर्निंग ए वैल्यू फ्रॉम ए मेथड " सेक्शन में वैल्यू कैसे रिटर्न करें, इसके बारे में भी पढ़ सकते हैं । कंपाइलर सावधानी से इस बात का ट्रैक रखता है कि क्या यह सुनिश्चित कर सकता है कि किसी विधि का रिटर्न मान विधि के निर्दिष्ट रिटर्न प्रकार से मेल खाता है। एक उदाहरण पर विचार करने के लिए Tutorialspoint के ऑनलाइन IDE का उपयोग करते हैं । आइए आदिम उदाहरण देखें:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
जैसा कि हम देख सकते हैं, मुख्य विधि यहां निष्पादित की जाती है, जो प्रोग्राम का प्रवेश बिंदु है। कोड की पंक्तियाँ ऊपर से नीचे तक क्रियान्वित की जाती हैं। हमारा मुख्य तरीका कोई मान वापस नहीं कर सकता है। यदि हम वहां कोई मान वापस करने का प्रयास करते हैं, तो हमें एक त्रुटि मिलेगी: "त्रुटि: मुख्य विधि को शून्य प्रकार का मान वापस करना चाहिए" । तदनुसार, विधि केवल स्क्रीन पर आउटपुट करती है। अब आइए संदेश उत्पन्न करने के लिए स्ट्रिंग शाब्दिक को एक अलग विधि में ले जाएँ:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println(getHelloMessage());
    }
    
    public static String getHelloMessage() {
        return "Hello World";
    }
    
}
जैसा कि हम देख सकते हैं, हमने रिटर्न वैल्यू को दर्शाने के लिए रिटर्न कीवर्ड का इस्तेमाल किया, जिसे हमने प्रिंटलाइन मेथड में पास किया। GetHelloMessage विधि की घोषणा इंगित करती है कि विधि एक स्ट्रिंग वापस कर देगी । यह संकलक को यह जांचने की अनुमति देता है कि विधि की क्रियाएं घोषित किए जाने के तरीके के अनुरूप हैं। स्वाभाविक रूप से, एक विधि घोषणा में निर्दिष्ट रिटर्न प्रकार कोड में वास्तव में लौटाए गए मूल्य के प्रकार से व्यापक हो सकता है, यानी महत्वपूर्ण बात यह है कि एक प्रकार का रूपांतरण संभव है। अन्यथा, हमें संकलन समय पर एक त्रुटि मिलेगी: "त्रुटि: असंगत प्रकार" । वैसे, आपके पास शायद एक सवाल है: रिटर्न क्यों हैनियंत्रण प्रवाह कथन माना जाता है? क्योंकि यह किसी प्रोग्राम के सामान्य टॉप-डाउन प्रवाह को बाधित कर सकता है। उदाहरण:

public class HelloWorld {

    public static void main(String[] args) {
        if (args.length == 0) {
            return;
        }
        for (String arg : args) {
            System.out.println(arg);
        }
    }
    
}
जैसा कि आप उदाहरण से देख सकते हैं, हम जावा प्रोग्राम में मुख्य विधि को बाधित करते हैं यदि इसे तर्क के बिना कहा जाता है। यह याद रखना महत्वपूर्ण है कि यदि आपके पास रिटर्न स्टेटमेंट के बाद कोड है, तो यह एक्सेस योग्य नहीं होगा। हमारा स्मार्ट कंपाइलर इसे नोटिस करेगा और आपको ऐसा प्रोग्राम चलाने से रोकेगा। उदाहरण के लिए, यह कोड संकलित नहीं होता है:

public static void main(String[] args) {
        System.out.println("1");
        return;
// we use output method after return statement, which is incorrect 
        System.out.println("2");
 }
इससे बचने के लिए एक गंदा हैक है। उदाहरण के लिए, डिबगिंग उद्देश्यों के लिए, या किसी अन्य कारण से। ऊपर दिए गए कोड को रिटर्न स्टेटमेंट को if ब्लॉक में लपेटकर तय किया जा सकता है :

if (2==2) {
    return;
}

एरर हैंडलिंग के दौरान रिटर्न स्टेटमेंट

कुछ और बहुत ही पेचीदा है - हम त्रुटि प्रबंधन के संयोजन में रिटर्न का उपयोग कर सकते हैं। मैं तुरंत कहना चाहता हूं कि कैच ब्लॉक में रिटर्न स्टेटमेंट का उपयोग करना बहुत ही खराब फॉर्म है, इसलिए आपको इससे बचना चाहिए। लेकिन हमें एक उदाहरण चाहिए, है ना? यह रहा:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Value: " + getIntValue());
    }
    
    public static int getIntValue() {
        int value = 1;
        try {
            System.out.println("Something terrible happens");
            throw new Exception();
        } catch (Exception e) {
            System.out.println("Cached value: " + value);
            return value;
        } finally {
            value++;
            System.out.println("New value: " + value);
        }
    }
    
}
पहली नज़र में, ऐसा लगता है कि 2 लौटाया जाना चाहिए, क्योंकि अंत में हमेशा निष्पादित किया जाता है। लेकिन नहीं, रिटर्न वैल्यू 1 होगी, और फाइनली ब्लॉक में वेरिएबल में बदलाव को नजरअंदाज कर दिया जाएगा। इसके अलावा, मान लीजिए कि मूल्य में एक वस्तु है और हम अंत में ब्लॉक में मान = शून्य कहते हैं। तब वह वस्तु, अशक्त नहीं, कैच ब्लॉक में वापस आ जाएगी । लेकिन अंत में ब्लॉक में रिटर्न स्टेटमेंट सही तरीके से काम करेगा । जाहिर है, रिटर्न स्टेटमेंट से जुड़े छोटे-छोटे आश्चर्य के लिए आपके सहकर्मी आपको धन्यवाद नहीं देंगे।

शून्य वर्ग

और अंत में। यह अजीब संरचना है जिसे आप लिख सकते हैं: void.class । हम्म। इसका क्या मतलब है और क्यों? वास्तव में जावा रिफ्लेक्शन एपीआई से जुड़े विभिन्न ढांचे और मुश्किल मामले हैं जहां यह बहुत उपयोगी हो सकता है। उदाहरण के लिए, आप जाँच सकते हैं कि किस प्रकार की विधि वापस आती है:

import java.lang.reflect.Method;

public class HelloWorld {

    public void getVoidValue() {
    }

    public static void main(String[] args) {
        for (Method method : HelloWorld.class.getDeclaredMethods()) {
            System.out.println(method.getReturnType() == void.class);
        }
    }
}
यह परीक्षण ढांचे में उपयोगी हो सकता है जहां आपको वास्तविक कोड को विधियों में बदलने की आवश्यकता होती है। लेकिन ऐसा करने के लिए, आपको यह समझने की आवश्यकता है कि कोई विधि कैसे व्यवहार करती है (अर्थात यह किस प्रकार का रिटर्न देती है)। उपरोक्त कोड में मुख्य विधि को लागू करने का दूसरा तरीका भी है :

public static void main(String[] args) {
        for (Method method : HelloWorld.class.getDeclaredMethods()) {
            System.out.println(method.getReturnType() == Void.TYPE);
        }
 }
आप स्टैक ओवरफ़्लो पर दोनों के बीच अंतर की एक बहुत ही रोचक चर्चा पढ़ सकते हैं: Java.lang.Void और void के बीच क्या अंतर है?
टिप्पणियां
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION