go - Use 'comma ok' idiom or return pointer? -
निम्नलिखित गो स्निपेट पर विचार करें:
func sheep () (int, bool) { वापसी 1, सच} फ़ंक्शन मुख्य () {अगर डॉली, ठीक: = भेड़ () {// कुछ करना}}
जैसा कि मैंने पढ़ा है उसे 'कॉमा ओक' मुहावरा कहा जाता है । जहां तक मैं यह बता सकता हूं कि इसका इस्तेमाल 'पाया' और 'न मिला' चीज़ से अलग करने के लिए किया जाता है।
उसी माध्यम से प्राप्त किया जा सकता है:
प्रकार भेड़ संरचना {} फ़ेन्क भेड़ () * भेड़ (वापसी और भेड़ {}} फ़ंक्शन मुख्य () {यदि डॉली: = भेड़ (); Dolly! = Nil {// do something}}
बाद के उदाहरण के लिए एक ही उद्देश्य को पूरा करने लगता है, शायद भी अच्छे। 'कॉमा ओके' उदाहरण के साथ, असाइनमेंट केवल अगर ब्लॉक में वैध है।
शायद मुझे कुछ विचारों की याद आ रही है कौन सा पैटर्न पसंदीदा है? और क्यों?
एक संक्षिप्त उदाहरण:
में जाओ, एक शून्य
मान पूरी तरह से अच्छा मूल्य हो सकता है उदाहरण के लिए एक शून्य टुकड़ा (लगभग) एक खाली टुकड़ा की तरह काम करता है, और यह उपयोगकर्ता-निर्धारित सूचक रिसीवर के लिए भी सही हो सकता है।
इस कारण से, अल्पविराम-ओके या अल्पविराम-त्रुटि मुहावरे को आम तौर पर पसंद किया जाता है क्योंकि यह स्पष्ट करता है कि फ़ंक्शन के कॉलर को त्रुटि मामले (या ठीक-ठीक) के मामले को स्पष्ट रूप से व्यवहार करने की आवश्यकता नहीं है।
इसलिए, यह मुहावरेदार है जब और यह मुहावरेदार है जब केवल वापसी मूल्य हमेशा मान्य होता है: यह एक ऐसा क्षेत्र है जहां गो अन्य भाषाओं से अलग है, जहां किसी नील रिटर्न मूल्य को संकेत करने के लिए इस्तेमाल किया जा सकता है त्रुटि। कॉमा-ओके और कॉमा-एरम के मुकाबले के मुहावरे कोड बनाकर शून्य बिलकुल "अरब डॉलर की गलती" के आसपास काम करते हैं जो अमान्य वापसी मान से निपटने में गलत नहीं है। अगर आप idiomatic कोड लिखते हैं, तो आप तुरंत देख सकते हैं कि जब त्रुटियों को अनदेखा किया जा रहा है: उदाहरण के लिए भेड़ वापस मान मान्य नहीं हो सकता है:
फेंक भेड़ () (* भेड़, बूल) {...} फ़ेन्क भेड़ () (एस * भेड़, ठीक है bool) {...} // (* भेड़, त्रुटि) {...}
func भेड़ () * भेड़ {...}
s2
को असाइनमेंट तुरंत संदिग्ध रूप से बाहर निकलता है:
s1: = sheep () S2, _: = भेड़ ()
Comments
Post a Comment