2010-02-04 20 views
17

में किसी फ़ंक्शन से जल्दी लौट रहा है क्या फ़ंक्शन की पूरी लंबाई चलाने के बजाए क्लासिक एएसपी में किसी फ़ंक्शन से जल्दी वापस लौटने का कोई तरीका है? उदाहरण के लिए मान लीजिए कि मैं समारोह है ...क्लासिक एएसपी

Function MyFunc(str) 
    if (str = "ReturnNow!") then 
    Response.Write("What up!")  
    else 
    Response.Write("Made it to the end")  
    end if 
End Function 

मैं इतना है कि यह लिख सकते हैं ...

Function MyFunc(str) 
    if (str = "ReturnNow!") then 
    Response.Write("What up!")  
    return 
    end if 

    Response.Write("Made it to the end")  
End Function 

नोट वापसी कथन जो निश्चित रूप से मैं क्लासिक एएसपी में नहीं कर सकते। कोड निष्पादन तोड़ने का कोई तरीका है जहां वह वापसी बयान बैठता है?

उत्तर

27

हाँ exit function का उपयोग कर।

Function MyFunc(str) 
    if str = "ReturnNow!" then 
    Response.Write("What up!")  
    Exit Function 
    end if 

    Response.Write("Made it to the end")  
End Function 

मैं आमतौर पर फ़ंक्शन से मूल्य लौटाते समय इसका उपयोग करता हूं।

Function usefulFunc(str) 
    ''# Validate Input 
    If str = "" Then 
     usefulFunc = "" 
     Exit Function 
    End If 

    ''# Real function 
    ''# ... 
End Function 
+0

@ एंथनी टिप्पणियों के साथ प्रारूपण सहायता के लिए धन्यवाद। –

4

क्लासिक एएसपी के साथ, आप Exit Function उपयोग करने की आवश्यकता:

Function MyFunc(str) 
    if (str = "ReturnNow!") then 
    Response.Write("What up!")  
    Exit Function 
    end if 

    Response.Write("Made it to the end")  
End Function 
4

के रूप में आप यह कर सकते हैं उपयोग Exit Function बताया गया है, लेकिन आप सावधानी का उपयोग करना चाहिए। सरल उदाहरण में आपने वास्तव में कोई फायदा नहीं दिया है, कोई अन्य कोड को किसी भी तरह से निष्पादित नहीं करेगा।

कोड के एक खंड में निकास बिंदु रखने से इसे पालन करना और डीबग करना मुश्किल हो सकता है। अधिक गंभीरता से यह कोड में कठिन परिवर्तनों को आगे बढ़ा सकता है, जिसके लिए अधिक व्यापक परिवर्तन की आवश्यकता होती है और इसलिए जोखिम बढ़ रहा है। इसलिए इस तरह के एक पैटर्न को "खराब गंध" माना जाना चाहिए।

एक सामान्य परिदृश्य जहां इसकी उचित स्वीकार्यता है जहां कोड कोड के शरीर के साथ जारी रखने से पहले अपने इनपुट पैरामीटर पर कुछ दावा कर सकता है। इसके अलावा आप इसे करने के लिए वास्तव में, वास्तव में अच्छा कारण व्यक्त करने में सक्षम होना चाहिए।

आप कह सकते हैं "अगर मैं ऐसा करता हूं तो मेरे पास If संरचनाएं होंगी और कोड में पहचान को अधिक बढ़ाएगी"। यदि ऐसा है तो फ़ंक्शन में वैसे भी बहुत अधिक कोड है और इसे छोटे कार्यों में दोबारा संशोधित किया जाना चाहिए।

+0

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

+1

@ रोब: मैं एक "धार्मिक" मुद्दे को एक ऐसे मुद्दे के रूप में परिभाषित करता हूं जहां एक तरफ या किसी अन्य को चुनने से परिणामों पर बहुत कम या कोई प्रभाव नहीं पड़ता है। दूसरी ओर सबसे अच्छा अभ्यास उन मुद्दों के बारे में है जहां एक तरफ या दूसरे का चयन करना अंतिम परिणामों पर महत्वपूर्ण प्रभाव डाल सकता है। एक सामान्य नियम के रूप में (दिमाग में कोई नियम कभी पूर्ण नहीं होता है) कोड के किसी भी पहचानने योग्य ब्लॉक के लिए प्रवेश का एक बिंदु और निकास का एक बिंदु होने के लिए यह "सर्वोत्तम अभ्यास" है। यह कार्यों के बारे में सच है, अगर बयान, लूप इत्यादि। 'एक्जिट फ़ंक्शन' एक उपयोगी टूल है जब "सर्वोत्तम अभ्यास" के लिए उचित __exception__ पाया जाता है। – AnthonyWJones

+0

सच है कि यह निश्चित रूप से कार्यों के लिए प्रवेश और बाहर निकलने का एक बिंदु है और मैं सहमत हूं कि यह एक अच्छा अभ्यास है। "एक्ज़िट फ़ंक्शन" कॉल का उपयोग करने के लिए मेरा मुख्य तर्क उस बिंदु के लिए होगा जो आपने पहले ही उल्लेख किया है जो विभिन्न दावों और/या सत्यापन कर रहा है। –

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