गो में टर्नरी ऑपरेटर: C को कैसे बदलें और पागल न हों

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: टर्नरी ऑपरेटर — दोस्त या दुश्मन?

\n\n

यदि आप C, C++, Java या JavaScript की दुनिया से गो में आए हैं, तो आप निश्चित रूप से संक्षिप्त संरचना के आदी हैं:

\n\n
int max = (a > b) ? a : b;
\n\n

यह — टर्नरी ऑपरेटर है। यह कॉम्पैक्ट, सुरुचिपूर्ण है और आपको एक पंक्ति में एक सरल शाखाकरण लिखने की अनुमति देता है। लेकिन जब आप गो में लिखना शुरू करते हैं, तो आपको एक आश्चर्य का सामना करना पड़ता है: गो में टर्नरी ऑपरेटर नहीं है। बिल्कुल नहीं। कोई ? : नहीं।

\n\n

भाषा के निर्माताओं ने ऐसा कदम क्यों उठाया? अब छोटी सशर्त असाइनमेंट कैसे लिखें? और सबसे महत्वपूर्ण बात, यह मुहावरेदार रूप से कैसे करें, यानी उस शैली में जो गो समुदाय में स्वीकार की जाती है?

\n\n

इस लेख में हम चर्चा करेंगे:

\n
    \n
  • गो में टर्नरी ऑपरेटर क्यों नहीं है (स्पॉइलर: यह एक सचेत निर्णय है)।
  • \n
  • if-else का उपयोग करके टर्नरी को कैसे बदलें।
  • \n
  • उन्नत तकनीकें: फ़ंक्शन, map, inlining।
  • \n
  • नियम का उल्लंघन कब किया जा सकता है (और किया जाना चाहिए)।
  • \n
\n\n

चलिए शुरू करते हैं!

\n\n

गो ने टर्नरी ऑपरेटर को क्यों छोड़ दिया?

\n\n

उत्तर सरल है और भाषा के दर्शन में निहित है: पठनीयता संक्षिप्तता से अधिक महत्वपूर्ण है।

\n\n

रॉबर्ट ग्रीसेमर (गो के निर्माताओं में से एक) ने एक बार कहा था: “टर्नरी ऑपरेटर बग का एक स्रोत है। इसे गलत पढ़ना बहुत आसान है, खासकर जब यह नेस्टेड हो”। और यह सच है। C के प्रसिद्ध उदाहरण को याद करें:

\n\n
int x = (a ? b : c) ? d : e;
\n\n

तुरंत समझने की कोशिश करें कि यह क्या करता है? गो के निर्माताओं ने फैसला किया कि कोड को स्पष्ट बनाने के लिए एक पंक्ति का त्याग करना बेहतर है।

\n\n

गो में प्राथमिकता है — इरादों की स्पष्टता। यदि आप एक शर्त लिख रहे हैं, तो इसे स्पष्ट होने दें। टर्नरी ऑपरेटर अक्सर एक “जादुई संख्या” में बदल जाता है: आप लाइन को देखते हैं और तुरंत तर्क नहीं समझ पाते हैं। गो में ऐसा नहीं होना चाहिए।

\n\n

मूल प्रतिस्थापन: if-else एक मुहावरे के रूप में

\n\n

टर्नरी को बदलने का सबसे सरल और सही तरीका सामान्य if-else का उपयोग करना है। हाँ, इसमें 1 के बजाय 3 पंक्तियाँ लगती हैं, लेकिन यह बिना किसी तनाव के पढ़ा जाता है।

\n\n

उदाहरण: दो संख्याओं में से अधिकतम ज्ञात करें।

\n\n

C में:

\n
int max = (a > b) ? a : b;
\n\n

गो में (मुहावरेदार):

\n
var max int\nif a > b {\n    max = a\n} else {\n    max = b\n}
\n\n

“लेकिन यह लंबा है!” — आप कहेंगे। हाँ। लेकिन इसे दूसरी तरफ से देखें: एक महीने में आप कोड खोलेंगे और तुरंत तर्क देखेंगे। कोई कोष्ठक नहीं, कोई अस्पष्टता नहीं। बस “यदि a, b से बड़ा है, तो max = a, अन्यथा max = b”।

\n\n

इसके अलावा, गो समुदाय इस शैली को सरल शर्तों के लिए एकमात्र सही मानता है। सब कुछ एक पंक्ति में समेटने की कोशिश न करें — इसे खराब शैली माना जाएगा।

\n\n

उन्नत तकनीकें: जब संक्षिप्तता चाहिए

\n\n

कभी-कभी आप ऐसा कोड लिखते हैं जहाँ if-else 10 पंक्तियाँ लेता है, हालाँकि संक्षेप में यह एक सरल असाइनमेंट है। ऐसे मामलों में, आप कई पैटर्न लागू कर सकते हैं जो मुहावरेदारता बनाए रखते हैं, लेकिन कोड को अधिक कॉम्पैक्ट बनाते हैं।

\n\n

1. सहायक फ़ंक्शन

\n\n

यदि आपको अक्सर दो मानों के बीच चयन करने की आवश्यकता होती है, तो तर्क को एक फ़ंक्शन में निकालें। यह एक-पंक्ति संचालन के लिए विशेष रूप से सुविधाजनक है।

\n\n
func ternary(cond bool, a, b string) string {\n    if cond {\n        return a\n    }\n    return b\n}\n\n// उपयोग:\ngreeting := ternary(isMorning, "शुभ प्रभात", "शुभ संध्या")
\n\n

महत्वपूर्ण: फ़ंक्शन का नाम ternary न रखें — इसे खराब शैली माना जाता है, क्योंकि आप पिछले दरवाजे से टर्नरी को “घुसाने” की कोशिश कर रहे हैं। बेहतर होगा कि एक सार्थक नाम दिया जाए, जैसे ifElse या choose। लेकिन यदि आप अपने लिए लिख रहे हैं — तो क्यों नहीं?

\n\n

2. चयन के लिए map का उपयोग

\n\n

यदि शर्त दो विकल्पों में से चयन करने तक सीमित है, तो आप बूलियन कुंजियों वाले map का उपयोग कर सकते हैं। यह असामान्य दिखता है, लेकिन कभी-कभी और भी बेहतर पढ़ा जाता है।

\n\n
var result = map[bo                

ब्लॉग

पुस्तक अनुशंसाएँ