जावा में गोटो स्टेटमेंट है?


259

मैं इस बारे में उलझन में हूँ। हम में से अधिकांश को बताया गया है कि जावा में कोई गोटो स्टेटमेंट नहीं है।

लेकिन मैंने पाया कि यह जावा में कीवर्ड में से एक है। इसका उपयोग कहां किया जा सकता है? यदि इसका उपयोग नहीं किया जा सकता है, तो इसे एक कीवर्ड के रूप में जावा में क्यों शामिल किया गया था?


13
बस सलाह का एक शब्द है: कभी भी गोटो का उपयोग न करें
लॉस्टिकलैंड

16
और फिर "" स्टेटमेंट टू वुडेन हेमडर्ड हार्मफुल 'कंसीडर्ड हार्मफुल ", और" "स्टेटमेंट टू वोरफाइड हार्मफुल" कंसीडर्ड हार्मफुल' कंसीडर्ड हार्मफुल 'माना जाता है? " VEEEEERY पुनरावर्ती, यह मेम।
क्रिस चारबारुक

70
'गोटो' हमेशा दुष्ट होता है - जैसे 'गोटो वर्क' या 'गोटो स्कूल';)
एंड्रियास डॉक

24
असली कारण यह है कि "जी ** ओ" शब्द अधिकांश प्रोग्रामिंग भाषाओं में अश्लील माना जाता है। जावा डिजाइनर सिर्फ निर्दोष युवा प्रोग्रामर को भ्रष्ट प्रभावों से बचा रहे हैं। (:-))
स्टीफन सी

25
गोटो के खिलाफ डायन-शिकार ने मेरे जीवन में कुछ सबसे उग्र क्षणों को जन्म दिया है। मैंने फ़ंक्शन में कार्यक्षमता छिपाकर लोगों को सी कोड देखा है, बहु-नेस्टेड छोरों में बेतुका निकास तर्क दिया है, और अन्यथा कोड-समीक्षा में अपने कोड की आलोचना करने वाले किसी व्यक्ति से बचने के लिए हर तरह के ओवर-इंजीनियरिंग कल्पनाशील बस। यह नियम, "आपको कई रिटर्न से बचना चाहिए" के साथ, बकवास में डूबा हुआ है। ऐसे समय होते हैं जब गोटो चीजों को कम बनाए रखता है। ऐसे समय होते हैं जब गोटो चीजों को अधिक बनाए रखता है। मैं उम्मीद कर रहा था कि 80 के दशक में इस चुड़ैल का शिकार हो गया होगा।

जवाबों:


200

जावा कीवर्ड सूची को निर्दिष्ट gotoकीवर्ड, लेकिन यह के रूप में "का प्रयोग नहीं किया" चिह्नित है।

यह मूल JVM ( @VitaliiFedorenko द्वारा उत्तर देखें ) में था, लेकिन फिर हटा दिया गया। संभवतः इसे एक आरक्षित खोजशब्द के रूप में रखा गया था जब इसे जावा के बाद के संस्करण में जोड़ा जाना था।

यदि gotoसूची में नहीं था, और यह बाद में भाषा में जोड़ा जाता है, तो मौजूदा कोड जो शब्द gotoको पहचानकर्ता (चर नाम, विधि का नाम, आदि ...) के रूप में उपयोग करता है , टूट जाएगा। लेकिन क्योंकि gotoयह एक कीवर्ड है, इसलिए ऐसा कोड वर्तमान में भी संकलित नहीं होगा, और यह संभव है कि यह मौजूदा कोड को तोड़े बिना, बाद में वास्तव में कुछ कर सके।


29
This was probably done in case it were to be added to a later version of Java.दरअसल, मुख्य कारण थोड़ा अलग है (नीचे मेरा जवाब देखें)
विटालि फेडोरेंको

2
यह अच्छी और रोचक जानकारी है, लेकिन यह स्पष्ट नहीं करता है कि यह अभी भी एक आरक्षित कीवर्ड क्यों है।
थॉमस

@ थोमस ने यह नहीं बताया कि यह आरक्षित क्यों है? यह एक कीवर्ड है, इसलिए इसे अब उपयोग नहीं किया जा सकता है; बाद में गोटो समस्याओं के कारण जीवन के लिए वसंत आ सकता है। यदि यह एक आरक्षित शब्द नहीं था, तो इसका उपयोग अब कोड (int गोटो = 2) बनाने के लिए किया जा सकता है, जो कि गोटो शुरू होने पर टूट जाएगा।

230

जेम्स गोस्लिंग ने मूल जेवीएम को gotoबयानों के समर्थन से बनाया , लेकिन फिर उन्होंने इस सुविधा को अनावश्यक रूप से हटा दिया। मुख्य कारण gotoअनावश्यक है कि आमतौर पर इसे अधिक पठनीय कथनों (जैसे break/continue) के साथ बदला जा सकता है या एक विधि में कोड का एक टुकड़ा निकालकर।

स्रोत: जेम्स गोसलिंग, प्रश्नोत्तर सत्र


24
"या एक विधि में कोड का एक टुकड़ा निकालकर" - कि उचित पूंछ कॉल उन्मूलन के बिना बहुत अच्छा होना चाहिए।
प्रदर्शन नाम

45
कभी कभी, के एक विवेकपूर्ण उपयोग goto है , कुछ व्यक्त करने के लिए सबसे readyble और स्पष्ट तरीका तो यह कुछ और में मजबूर कर जबरदस्ती है कम पठनीय
डिडुप्लिकेटर

1
@ डेडोप्लिकेटर गोटो का उपयोग, जैसा कि हो सकता है, हमेशा गलत होने का खतरा होता है।
लेबी मूरत

@Deduplicator गोटो में केवल अच्छा प्रैटिस माना जाने वाला गोटो का एकमात्र उपयोग ब्रेक / जारी रखने के द्वारा समर्थित है।
शीतकालीन

2
गोटो जावा में एक आरक्षित कीवर्ड है क्योंकि यह लोगों को "गोटो:" नामकरण लेबल से रोकता है।
शीतकालीन

147

कीवर्ड मौजूद है, लेकिन इसे लागू नहीं किया गया है।

गोटो का उपयोग करने का एकमात्र अच्छा कारण जो मैं सोच सकता हूं वह यह है:

for (int i = 0; i < MAX_I; i++) {
    for (int j = 0; j < MAX_J; j++) {
        // do stuff
        goto outsideloops; // to break out of both loops
    }
}
outsideloops:

जावा में आप ऐसा कर सकते हैं:

loops:
for (int i = 0; i < MAX_I; i++) {
    for (int j = 0; j < MAX_J; j++) {
        // do stuff
        break loops;
    }
}

1
@ ज़ोल्टन नं - यह कोड को पहले लूप से ठीक पहले लेबल पर रीडायरेक्ट करता है।
अस्वच्छता १६'१२ को १२:०२

21
@assylias खैर, बिलकुल नहीं। लेबल बाहरी लूप को लेबल करता है। फिर break loopsइसका अर्थ है "लूप से टूटना loops"। हो सकता है कि पूर्वव्यापी में लेबल के लिए एक बेहतर नाम हो सकता है outer
जोनिस्टोटेन

8
"गोटो का उपयोग करने का एकमात्र अच्छा कारण" त्वरित और गंदे छोटे प्रोग्राम जिन्हें बिना शर्त अनंत लूप की आवश्यकता होती है, गोटो का बहुत उपयोग करते हैं। का उपयोग कर while (true) {... }ओवरकिल है। GOTO को अक्सर इसके अनुचित उपयोगों के लिए कलंकित किया जाता है, लेकिन मेरा तर्क है कि बूलियन शाब्दिक की अनावश्यक तुलना GOTO से भी बदतर है।
अलेक्जेंडर - मोनिका

1
लूप के बाद लूप लेबल नहीं होना चाहिए?
GC_

1
मैंने हाल ही में पता लगाया, कि यह लेबलिंग तकनीक एक continue LABEL;बयान के संयोजन में भी बहुत उपयोगी है । इस प्रकार आप एक बाहरी झूठ बोलना जारी रख सकते हैं।
infotoni91

43

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html

"कीवर्ड कास्ट और गोटो आरक्षित हैं, भले ही वे वर्तमान में उपयोग नहीं किए जाते हैं।"


12
"अहस्ताक्षरित" भी नहीं है! (आह)
मैथ्यू

समझ में आता है, क्योंकि जावा में सभी आदिम प्रकारों पर हस्ताक्षर किए गए हैं।
mwieczorek

1
@mwieczorek सभी नहीं। "चार" एक आदिम प्रकार है और यह अहस्ताक्षरित है।
सर्गेई क्रिवनकोव

29

अगर भाषा डिजाइनरों ने जरूरत महसूस की तो एक दिन उनका उपयोग किया जा सकता है।

इसके अलावा, यदि प्रोग्रामर उन भाषाओं के प्रोग्रामर हैं जिनके पास ये कीवर्ड हैं (जैसे। C, C ++) तो वे गलती से उपयोग करते हैं, तो जावा कंपाइलर एक उपयोगी त्रुटि संदेश दे सकता है।

या हो सकता है कि यह केवल प्रोग्रामर को गोटो का उपयोग करने से रोकने के लिए था :)


जावा में लापता गोटो की कार्यक्षमता को गोटो का उपयोग न करने के लिए पर्याप्त कारण होना चाहिए - एक कीवर्ड के रूप में इसे आरक्षित करने की कोई आवश्यकता नहीं है। आपके तर्क के बाद, सब कुछ एक कीवर्ड होगा, क्योंकि यह या तो अन्य भाषाओं और / या जावा डिजाइनरों द्वारा उपयोग किया जाता है
COULD

1
मुझे नहीं लगता कि मेरे तर्क का अर्थ है कि सब कुछ एक कीवर्ड होगा। कई प्रोग्रामिंग भाषाओं में उपयोग में कीवर्ड का एक छोटा सा सेट है जो जावा में उपयोगी रूप से पाया और संभाला जा सकता है। जावा ने अपनी C / C ++ धरोहर को आरक्षित gotoऔर constप्रतिबिंबित किया है लेकिन वे अनिमित रूप से बने हुए हैं (हालाँकि बाद को लागू करने को लेकर बहसें होती रही हैं)। एक जोड़े को अधिक पसंद करते हैं assertऔर enumशुरू में आरक्षित नहीं थे, लेकिन शायद उन्हें दिया जाना चाहिए था। लेकिन एक अद्भुत बात है।
डेव

19

वे भविष्य के उपयोग के लिए आरक्षित हैं (देखें: जावा भाषा कीवर्ड )

कीवर्ड कास्ट और गोटो आरक्षित हैं, भले ही वे वर्तमान में उपयोग नहीं किए गए हैं।

कारण क्यों नहीं है जावा में कोई गोटो बयान "में पाया जा सकता जावा भाषा पर्यावरण ":

Java का कोई गोटो स्टेटमेंट नहीं है। यह सच है कि गोटो है (गलत) का उपयोग अधिक बार किया जाता है न कि "क्योंकि यह वहां है"। गोटो को खत्म करने से भाषा का सरलीकरण हुआ - उदाहरण के लिए, बयान के बीच में गोटो के प्रभावों के बारे में कोई नियम नहीं हैं। सी कोड की लगभग 100,000 पंक्तियों पर किए गए अध्ययनों ने निर्धारित किया कि लगभग 90 प्रतिशत गोटो बयानों का उपयोग शुद्ध रूप से नेस्टेड छोरों को तोड़ने के प्रभाव को प्राप्त करने के लिए किया गया था। जैसा कि ऊपर उल्लेख किया गया है, मल्टी-लेवल ब्रेक और गोटो बयानों की सबसे अधिक आवश्यकता को जारी रखते हैं।


gotoआरक्षित है, लेकिन भविष्य के उपयोग के लिए नहीं।
२०:४२ पर लोर्न

17

जावा में "जारी" लेबल का उपयोग करने का एक उदाहरण है:

public class Label {
    public static void main(String[] args) {
        int temp = 0;
        out: // label
        for (int i = 0; i < 3; ++i) {
            System.out.println("I am here");
            for (int j = 0; j < 20; ++j) {
                if(temp==0) {
                    System.out.println("j: " + j);
                    if (j == 1) {
                        temp = j;
                        continue out; // goto label "out"
                    }
                }
            }
        }
        System.out.println("temp = " + temp);
    }
}

परिणाम:

I am here // i=0
j: 0
j: 1
I am here // i=1
I am here // i=2
temp = 1

10

यह समझना महत्वपूर्ण है कि gotoनिर्माण उन दिनों से शेष है जो प्रोग्रामर मशीन कोड और असेंबली भाषा में प्रोग्राम करते हैं। क्योंकि वे भाषाएँ इतनी बुनियादी हैं (जैसा कि, प्रत्येक निर्देश केवल एक काम करता है), कार्यक्रम नियंत्रण प्रवाह पूरी तरह से gotoबयानों के साथ किया जाता है (लेकिन विधानसभा भाषा में, इन्हें जंप या शाखा के रूप में संदर्भित किया जाता है। निर्देशों के )।

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

यह स्पष्ट है कि जावा C / C ++ का विकास है। जावा सी से बहुत सारी सुविधाएँ साझा करता है, लेकिन विवरणों का एक बहुत अधिक सार है, और इसलिए बस अलग तरह से लिखा गया है। जावा एक बहुत ही उच्च-स्तरीय भाषा है, इसलिए निम्न-स्तरीय विशेषताओं का होना आवश्यक नहीं है, gotoजब अधिक उच्च-स्तरीय निर्माण जैसे कार्य, प्रत्येक के लिए, और जबकि लूप प्रोग्राम नियंत्रण प्रवाह करते हैं। कल्पना करें कि आप एक फ़ंक्शन में थे और gotoकिसी अन्य फ़ंक्शन में लेबल के लिए किया था । अन्य फ़ंक्शन वापस आने पर क्या होगा? यह विचार बेतुका है।

यह आवश्यक रूप से उत्तर नहीं देता है कि जावा में gotoकथन क्यों शामिल है, यह अभी तक संकलित नहीं होने देगा, लेकिन यह जानना महत्वपूर्ण है कि gotoपहले कभी निचले स्तर के अनुप्रयोगों में इसका उपयोग क्यों किया गया था, और यह सिर्फ समझ में क्यों नहीं आता है जावा में उपयोग किया जाता है।


"कार्यक्रम नियंत्रण प्रवाह पूरी तरह से गोटो के साथ किया जाता है"। हमेशा, बिना शर्त गोटो नहीं।
पीटर मॉर्टेंसन

एक फ़ंक्शन से लेबल में "गोटो" के साथ दूसरे फ़ंक्शन में कूदना भी C / C ++ में संभव नहीं है। गोटो इन C / C ++ एकल फ़ंक्शन ब्लॉक तक सीमित है।
user2328447

"अधिक उच्च-स्तरीय निर्माण होने पर गोटो की तरह निम्न-स्तर की विशेषताएं होना आवश्यक नहीं है -" आवश्यकता और आत्मनिर्भरता "याद रखें।" यह सिर्फ "आवश्यक नहीं है"। और इस प्रकार कोई कारण नहीं। क्या कारण है: असेंबलर के JMP, BNEs और अधिक के लिए "उच्च स्तर" विकल्प के रूप में "गोटो" उचित है यदि आप "निष्पादन योग्य कोड" पर कूदना चाहते हैं, लेकिन जावा बायोटेक है और इस तरह "निष्पादन योग्य" नहीं है। ;-)
reichhart

10

नहीं, gotoउपयोग नहीं किया गया है, लेकिन आप लेबल को परिभाषित कर सकते हैं और लेबल तक एक लूप छोड़ सकते हैं। आप लेबल द्वारा उपयोग breakया continueअनुसरण कर सकते हैं । तो आप एक से अधिक लूप स्तर से बाहर कूद सकते हैं। ट्यूटोरियल पर एक नजर है ।


9

नहीं, शुक्र है कि gotoजावा में नहीं है।

gotoकीवर्ड केवल आरक्षित है, लेकिन उनका उपयोग नहीं (समान के लिए चला जाता है const)।


क्या मुझे पता है कि आरक्षित का यहाँ क्या मतलब है? यदि कोड में गोटो और कास्ट का उपयोग करना एक अच्छा अभ्यास नहीं है, तो वे इसे आरक्षित क्यों करते हैं? क्या आप समझा सकते हैं?
गोपी

@ श्री कुमार: देखिए @ ऐप्पलवेर का जवाब, यह मौजूद है लेकिन इसे लागू नहीं किया गया है।
वैलेंटाइन रोचर

1
@ श्री कुमार: आरक्षित कीवर्ड उन्हें चर नाम या समान के रूप में उपयोग करने से रोकते हैं। इस तरह, इन खोजशब्दों को पुराने स्रोत कोड को तोड़ने के बिना जावा के भविष्य के संस्करणों में लागू किया जा सकता है जो अन्यथा उनका उपयोग कर सकते थे।
पीटर डि सेको

8

क्योंकि यह समर्थित नहीं है और आप ऐसा gotoकीवर्ड क्यों चाहते हैं जिसमें कुछ भी नहीं है या नामांकित चर नहीं है goto?

यद्यपि आप प्रभावी रूप से क्या करने के लिए उपयोग break label;और continue label;बयान कर सकते हैं gotoलेकिन मैं इसकी सिफारिश नहीं करूंगा।

public static void main(String [] args) {

     boolean t = true;

     first: {
        second: {
           third: {
               System.out.println("Before the break");

               if (t) {
                  break second;
               }

               System.out.println("Not executed");
           }

           System.out.println("Not executed - end of second block");
        }

        System.out.println("End of third block");
     }
}

10
-1 मुझे गोटो नाम के एक चर या विधि की अनुमति क्यों नहीं दी जानी चाहिए?
माइकल बॉर्गवर्ड

4
क्योंकि प्रोग्रामिंग की भूमि में इसका एक अर्थ है जो जावा पर लागू नहीं है। यह चर नाम का एक खराब विकल्प भी है।
pjp

एक चर 'प्रिंट' किसके लिए उपयोग किया जाएगा? आपके द्वारा उल्लिखित शब्द, चर या कीवर्ड की तुलना में विधि के नाम की तरह हैं।
pjp

3
-1: सबसे पहले, सिर्फ इसलिए कि जावा "गोटो" फ्लो कंट्रोल स्टेटमेंट का समर्थन नहीं करता है, इसका मतलब यह नहीं है कि यह "गोटो" कीवर्ड है जो कुछ भी नहीं करता है। दूसरा, "गोटो" एक खराब चर नाम हो सकता है, लेकिन यह एक उत्कृष्ट विधि का नाम हो सकता है, जिसका हम उपयोग नहीं कर सकते क्योंकि "गोटो" एक कीवर्ड है। तीसरा, "ब्रेक लेबल" और "जारी लेबल" बहुत अच्छे कारण के लिए मौजूद हैं, इसलिए "इसकी सिफारिश नहीं करना" बहुत उपयोगी नहीं है। और चौथा, क्योंकि सूर्य कहते हैं कि यह "वर्तमान में उपयोग नहीं किया गया है", इसका सबसे अधिक अर्थ यह है कि उन्होंने एक बार लागू करने की योजना बनाई थी, लेकिन जब वे अन्यथा निर्णय नहीं लेते, तो कीवर्ड से छुटकारा नहीं चाहते थे।
वोजिस्लाव स्टोजकोविक

2
@VojislavStojkovic यह सिर्फ पागल बात है। 1) यही कारण है कि यह कुछ भी नहीं करता है क्योंकि यह इसका समर्थन नहीं करता है। जेएलएस के अनुसार The keywords const and goto are reserved, even though they are not currently used. This may allow a Java compiler to produce better error messages if these C++ keywords incorrectly appear in programs.इसका अर्थ है "हम इसका उपयोग नहीं करते हैं, इसलिए यदि आप C ++ पृष्ठभूमि से आ रहे हैं तो हम आपको इसे बिल्कुल भी बताने नहीं देंगे।" 2) gotoएक भयानक विधि का नाम है। माफ़ करना। 3) ब्रेक और जारी रखने की सिफारिश की जाती है, लेकिन यहां इस्तेमाल किए गए तरीके से नहीं । 4) "सबसे अधिक संभावना" [उद्धरण वांछित]।
corsiKa

7

नहीं है, gotoएक आरक्षित शब्द होने के बावजूद, जावा में नहीं किया जाता है। उसी के लिए सच है const। इन दोनों का उपयोग C ++ में किया जाता है, शायद यही कारण है कि वे आरक्षित हैं; इरादा शायद C ++ प्रोग्रामर के जावा में जाने से बचने से बचने के लिए था, और शायद जावा के बाद के संशोधनों में उनका उपयोग करने का विकल्प भी रखना था।


1
मैं वास्तव gotoमें कम से कम निकट भविष्य में समर्थित नहीं है;)
बूझो

6
@Bozho: ठीक है, यह कुछ सरल नई सुविधा के लिए इस्तेमाल किया जा सकता है जिसका बुरा पुराने "हानिकारक" गोटो से कोई लेना देना नहीं है।
माइकल बोर्गवर्ड

3

ध्यान दें कि आप गोटो के अधिकांश सौम्य उपयोगों को बदल सकते हैं

  • वापसी

  • टूटना

  • तोड़ लेबल

  • अंत में फेंक-पकड़ने की कोशिश


5
अपवादों का उपयोग प्रवाह नियंत्रण के लिए नहीं किया जाना चाहिए
ChssPly76

13
अपवाद का उपयोग प्रवाह नियंत्रण के लिए किया जाता है, लेकिन इसका उपयोग केवल असाधारण मामलों के लिए किया जाना चाहिए। उदाहरण के लिए, सी में गोटो के उपयोग में से एक त्रुटि-हैंडलिंग है, खासकर अगर इसमें सफाई शामिल है।
स्टारब्ले

2
@starblue, आपने मेरे मुंह से शब्द निकाल लिए। एक अपवाद को फेंकना नियंत्रण प्रवाह है। C में, वास्तव में, आप कुछ हद तक setjmp / longjmp के माध्यम से अपवाद हैंडलिंग को आसानी से कार्यान्वित कर सकते हैं, यह सुनिश्चित करके कि आप हैंडलिंग कोड में पहले setjmp करते हैं और अपवाद पर longjmp () को निष्पादित करते हैं।

मैं एक अगर जाँच करना चाहता हूँ और विधि का आधा छोड़ अगर सच है। जाने के बिना मैं एक और विशाल का उपयोग करना चाहिए। IMO यह बहुत बदसूरत है क्योंकि बहुत अधिक
परपंरा

1
@WVrock आप कोशिश कर सकते हैंreturn
एंड्रयू लाजर

2

जैसा कि बताया गया था, gotoजावा में कोई भी नहीं है, लेकिन कीवर्ड को आरक्षित किया गया था जब सूर्य gotoको एक दिन जावा में जोड़ने जैसा महसूस हुआ था । वे बहुत अधिक कोड को तोड़े बिना इसे जोड़ना चाहते थे, इसलिए उन्होंने कीवर्ड आरक्षित कर दिया। ध्यान दें कि जावा 5 के साथ उन्होंने जोड़ाenum कीवर्ड और यह इतना कोड भी नहीं तोड़ पाया।

हालांकि जावा नहीं है goto, यह कुछ निर्माणों है के कुछ उपयोगों के लिए जो अनुरूप goto, अर्थात् करने में सक्षम होने breakऔर continueनामित छोरों के साथ। इसके अलावा, finallyएक प्रकार का मुड़ के रूप में सोचा जा सकता है goto


1

समान नाम वाले चरों की घोषणाओं पर रोक लगाने के लिए।

जैसे int i = 0, goto;


3
लेकिन क्यों ? हमें इन घोषणाओं को करने की अनुमति क्यों नहीं दी जानी चाहिए?
ApproachingDarknessFish

1

यह उन चीजों में से एक माना जाता है जिन्हें आप डू नॉट डू करते हैं, लेकिन डेवलपर्स के लिए भ्रम से बचने के लिए संभवतः एक आरक्षित शब्द के रूप में सूचीबद्ध किया गया था।


1

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto

यदि आपको बताया गया है कि जावा में कोई गोटो स्टेटमेंट नहीं है तो आपको मूर्ख बनाया गया है। दरअसल, जावा में 'सोर्स' कोड की दो परतें होती हैं।


5
यह कहने जैसा है कि किसी भी भाषा में एक गोटो होता है क्योंकि असेंबली कोड में एक बिना शर्त शाखा मौजूद होती है। बाइट कोड में गोटो होने का मतलब यह नहीं है कि जावा में गोटो है क्योंकि "जावा में" का अर्थ "जावा भाषा में" है, और बाइट कोड स्रोत की एक परत नहीं है।

@ tgm1024, "जावा में" भी "जावा प्लेटफॉर्म में" के रूप में व्याख्या की जा सकती है। जावा संकलक जावा वीवीसी का उत्पादन करने की आवश्यकता है या जावा प्लेटफॉर्म जेवीएम में आउटपुट काम नहीं करेगा। C ++, उदाहरण के लिए, संकलन आउटपुट निर्दिष्ट नहीं करता है और कंपाइलर मशीन कोड (या किसी अन्य कोड) के किसी भी रूप का उत्पादन करने के लिए स्वतंत्र है। जावा बाइटकोड प्रोग्राम किए गए एप्लिकेशन को "जावा एप्लिकेशन" कहा जा सकता है लेकिन मशीन कोड प्रोग्राम एप्लिकेशन को "सी ++ एप्लिकेशन" नहीं कहा जा सकता है।
मिकेल लिंडलोफ

2
मुझे पूरा पता है कि जावा बायटेकोड क्या है। मैं पहली बार 1996 में जावा में कोडिंग कर रहा था। और आप अन्य भाषाओं में JVM के लिए java bytecode उत्पन्न कर सकते हैं। जहां मैं आपको सही कर रहा हूं, यह विचार है कि स्रोत की दो परतें हैं। वहाँ नहीं है। आपके पास जावा स्रोत है और यह जावा बाइट कोड (जेवीएम द्वारा निष्पादित) के लिए संकलित है और यह स्रोत की एक अतिरिक्त परत नहीं है। सिर्फ इसलिए कि बाइट कोड में एक "गोटो" है इसका मतलब यह नहीं है कि जावा में "गोटो" है। जावा ने ब्रेक का नाम दिया है और नाम जारी है, लेकिन कोई गोटो नहीं है।

@ tgm1024 मैं एक पतन से जाग गया था :) यह आसानी से लग सकता है कि मैंने तर्क खो दिया क्योंकि आपने आखिरी टिप्पणी की थी और आपकी साख प्रभावशाली है। मेरी बात, जिसका मैं निर्माण कर रहा था, यह था कि जावा बाइटकोड के साथ कार्यक्रम करना बहुत संभव है। आपको आश्वस्त करने के लिए, यहां तक ​​कि इसके बारे में एक सवाल है: stackoverflow.com/questions/3150254/…
Mikael Lindlöf

1

निम्न लिंक देखें सभी जावा आरक्षित शब्द दिखाता है और आपको बताता है कि उन्होंने कहाँ जोड़े हैं।

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html

गोटो आरक्षित है, भले ही यह वर्तमान में उपयोग नहीं किया गया है, कभी भी कभी भी नहीं कहेंगे :)


1

मैं इसका प्रशंसक नहीं हूं goto या तो , क्योंकि यह आमतौर पर कोड को कम पठनीय बनाता है। हालांकि मैं मानता हूं कि उस नियम के अपवाद हैं (विशेषकर जब यह लेक्सर्स और पार्सर्स की बात आती है!)।

पाठ्यक्रम के आप हमेशा अपने कार्यक्रम को क्लेन नॉर्मफॉर्म में कुछ असेंबलर की तरह अनुवाद करके ला सकते हैं और फिर कुछ ऐसा लिख ​​सकते हैं

int line = 1;
boolean running = true;
while(running)
{
    switch(line++)
    {
        case 1: /* line 1 */
                break;
        case 2: /* line 2 */
                break;
        ...
        case 42: line = 1337; // goto 1337
                break;
        ...
        default: running = false;
                break;
    }
}

(तो आप मूल रूप से एक वीएम लिखें जो आपके बाइनरी कोड को निष्पादित करता है ... जहां lineनिर्देश सूचक से मेल खाती है)

यह कोड का उपयोग करने की तुलना में बहुत अधिक पठनीय है goto, है ना?


अगला सवाल, "पायथन में एक स्विच स्टेटमेंट है"
मार्क के कोवान

0

बेशक यह कीवर्ड है, लेकिन इसका उपयोग सोर्स कोड के स्तर पर नहीं किया जाता है।

लेकिन अगर आप जैस्मीन या अन्य निचले स्तर की भाषा का उपयोग करते हैं, जो कि बाइटकोड में बदल जाती है, तो "गोटो" है


-1

क्योंकि यद्यपि जावा भाषा इसका उपयोग नहीं करती है, JVM बायटेकोड करता है।


7
फिर भाषा में कोई loadकीवर्ड क्यों नहीं है ?
ApproachingDarknessFish

3
@gribnit, bytecode में एक गोटो होने से ऊपरी स्तर के आरक्षित शब्दों के लिए कुछ भी मतलब नहीं है।

-6

गोटो में नहीं है जावा

आपको GOTO का उपयोग करना होगा लेकिन यह सही ढंग से काम नहीं करता है। कुंजी जावा शब्द का उपयोग नहीं किया गया है। http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

   public static void main(String[] args) {            
            GOTO me;
            //code;
            me:
            //code; 
            }   
   }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.