2013-07-26 3 views
5

माइक्रोसॉफ्ट टी-एसक्यूएल कोड के स्वरूपण के बारे में एक "धार्मिक" चर्चा में, मैंने सवाल किया कि क्या टीओ-एसक्यूएल सिंटैक्स में गोटो स्टेटमेंट अभी भी उपलब्ध है या नहीं। टी-एसक्यूएल का उपयोग करने के 13 वर्षों में मैंने कभी इसका इस्तेमाल करने का अवसर नहीं लिया है, और वास्तव में यह नहीं पता था कि यह अस्तित्व में है या नहीं। दस्तावेज़ीकरण की एक संक्षिप्त खोज के बाद और मेरे कर्कश के लिए यह वास्तव में मौजूद है!टी-एसक्यूएल गोटो स्टेटमेंट का उपयोग किस मामले में स्वीकार्य होगा?

वहाँ कम से कम एक मामले जहां गोटो बयान एक समाधान है कि प्रदर्शन एक से बेहतर है, जिसमें अन्य उच्च आदेश प्रोग्रामिंग निर्माणों इस्तेमाल कर रहे हैं लाभ होगा है:

मेरा प्रश्न है?

  • एन्क्रिप्शन एल्गोरिथ्म कार्यान्वयन

मेरा प्रश्न है नहीं:

  • मैं कैसे एक पूरे समारोह बनाने ऐसा करने के लिए बिना कार्यक्षमता के छोटे बिट का उपयोग करते हैं?
  • मैं प्रतिलिपि/पेस्ट के बिना त्रुटि हैंडलिंग कार्यक्षमता कैसे दोहरा सकता हूं?
+0

मैं एक बार में एक प्रश्न जहां गोटो जरूरत थी हल: http://stackoverflow.com/questions/7244617/data-grouping-according-to-relevant-values-in-sql-server/7254163#7254163 –

+0

@ t-clausen.dk निश्चित रूप से उत्तर के रूप में सूचीबद्ध होने की आवश्यकता है! यह निश्चित रूप से गोटो का एक दिलचस्प और अनूठा उपयोग है! किसी भी विचार पर आपने थोड़ी देर के लूप का उपयोग क्यों नहीं किया? –

+0

जो कि 'WHILE' के साथ भी किया जा सकता था :) –

उत्तर

4

मैं लगभग GOTO का उपयोग नहीं करता और आसानी से इसके बिना रह सकता हूं।

एक मामला जहां मैं इसका उपयोग करने पर विचार करता हूं वह तब होता है जब मेरे पास जटिल कोड होता है जो बहुत सारी त्रुटि जांच करता है। जब कोई त्रुटि लौटाती है तो मैं कुछ कार्रवाई करना चाहूंगा, और GOTO मुझे त्रुटि जांच के लिए कोड के एक ब्लॉक को परिभाषित करने की अनुमति देता है।

आप इस समस्या को कई तरीकों से हल कर सकते हैं, लेकिन GOTO एक उचित विकल्प है जो गारंटी देता है कि त्रुटियां लगातार संसाधित की जाती हैं और कोड if @Error = 0 . . . बयान के साथ अव्यवस्थित नहीं होता है।

+1

मुझे लगता है कि आप यहां क्या संदर्भित करते हैं, यह 5 कथन की तरह चीजों के लिए विनाशकारी त्रुटि हैंडलिंग है जो असफल हो सकती है और यदि उनमें से कोई भी विफल हो तो केवल एक त्रुटि हैंडलिंग ब्लॉक का उपयोग करें। –

+0

ऐसा लगता है कि SQL सर्वर के नए पुनरावृत्तियों में उपलब्ध प्रयास-कैच अर्थशास्त्र के साथ अब यह स्थिति अधिकतर टालने योग्य है। @ गॉर्डन लिनॉफ, क्या आपने दो तरीकों की तुलना की है? –

+1

@ नॉर्मनएच। । । 'कोशिश करें/पकड़ें 'ब्लॉक' GOTO' और त्रुटि प्रबंधन को प्रतिस्थापित नहीं करते हैं। त्रुटि प्रबंधन कोड अनिवार्य रूप से संग्रहीत प्रक्रिया के लिए "निकास" कोड है, जब कोई पाया जाता है तो त्रुटियों को लॉग करने के लिए कहें।'कोशिश/पकड़' ब्लॉक त्रुटि को पकड़ता है (और इसे संसाधित कर सकता है, लेकिन सामान्य त्रुटि प्रसंस्करण कोड का बिंदु एक ही कोड को दोहराए जाने से बचने के लिए है)। –

2

मैंने बड़े स्क्रिप्ट में कुछ बार देखा, जहां लोग इसे पठनीयता में सुधार के लिए इस्तेमाल करते थे। कभी-कभी यह बेहतर पठनीय है लेकिन ज्यादातर यह स्पेगेटी कोड में बदल जाता है।

मुझे केवल एक ऐसी स्थिति दिखाई देती है जहां गोटो शायद बेहतर प्रदर्शन कर सके। लूप के दौरान एक बहु के अंदर। आप कई breaks के बजाय एक बार गोटो का उपयोग कर सकते हैं जो कि सबसे ऊपर लूप मौजूद है। फिर भी मेरी राय ब्रेक में गोटो से काफी बेहतर नहीं है, यह दोनों अच्छी प्रोग्रामिंग शैली नहीं है।

while ... 
    while ... 
    while... 
    break 
    break 
break 


while ... 
    while ... 
    while... 
    goto endloops 

endloops: 
+0

यह एक अच्छा जवाब और एक अद्वितीय दृष्टिकोण है। निश्चित रूप से स्पेगेटी कोड के खिलाफ सुरक्षा एक चुनौती है - लेकिन यह कार्यों के पूर्ण उपयोग के साथ भी हो सकती है! –

संबंधित मुद्दे