मुख्य सामग्री पर जाएं
मॉड्यूल 2 · पाठ 1 का 5पाठ्यक्रम में 6/50~10 min
मॉड्यूल पाठ (1/5)

यदि, अन्यथा, और init कथन

गो में if सिंटैक्स क्लासिक है लेकिन दो महत्वपूर्ण अंतरों के साथ सी/जावा की तुलना में: स्थिति के चारों ओर कोई कोष्ठक नहीं, और यदि में सीधे एक अस्थायी चर घोषित करने की क्षमता (इनिट स्टेटमेंट)।

मूल वाक्यविन्यास

Go
if temperatura > 30 {
    fmt.Println("caldo")
} else if temperatura > 20 {
    fmt.Println("mite")
} else {
    fmt.Println("fresco")
}

ब्रेसेस अनिवार्य हैं, यहां तक ​​कि सिंगल-लाइन ब्लॉक के लिए भी। द शर्त bool प्रकार की होनी चाहिए: Python या JS जैसी कोई "सच्चाई" नहीं।

Go
n := 0
// if n { ... }   // ERRORE: int non è bool
if n != 0 { ... }  // ok

Init कथन: दायरा if तक सीमित है

आप if/else के अंदर एक वैरिएबल को केवल वैध घोषित कर सकते हैं। इसे ; के साथ शर्त से अलग करना:

Go
if v, err := call(); err == nil {
    fmt.Println("ok", v)
} else {
    fmt.Println("ko", err)
}
// qui v ed err NON esistono più

यह बाहरी दायरे को प्रदूषित किए बिना त्रुटियों से निपटने का मुहावरेदार पैटर्न है।

यदि दायरे में छायांकन

यदि किसी बाहरी चर को init द्वारा "छाया" मिलता है, तो अंदर यदि स्थानीय संस्करण जीतता है. ठीक इसके बाद, बाहरी व्यक्ति फिर से उभर आता है।

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)  // mai stampato (3 < 5)
} else {
    fmt.Println("else:", x)    // 3
}
fmt.Println("dopo:", x)         // 10 — quella esterna

कोई टर्नरी ऑपरेटर नहीं

गो के पास कोई cond ? a : b नहीं है। सशर्त असाइनमेंट के लिए आपको if/else की आवश्यकता है 3-4 पंक्तियों में - यह पठनीयता को बढ़ावा देने के लिए एक डिज़ाइन विकल्प है।

Go
var label string
if age >= 18 {
    label = "adulto"
} else {
    label = "minore"
}

इसे अजमाएं

व्यायाम#go.m2.l1.e1
प्रयास: 0लोड हो रहा है...

n के मान के आधार पर 'सकारात्मक', 'शून्य' या 'नकारात्मक' प्रिंट करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

`यदि / अन्यथा यदि / अन्यथा` संकेत पर शर्तों के साथ श्रृंखला।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#go.m2.l1.e2
प्रयास: 0लोड हो रहा है...

यदि में v := 42 घोषित करने के लिए init कथन का उपयोग करें और इसे केवल तभी प्रिंट करें यदि v >= 18 हो।

संपादक लोड हो रहा है...
संकेत दिखाएँ

सिंटैक्स: `यदि init; शर्त {... }`.

3 प्रयासों के बाद समाधान उपलब्ध है

Quiz#go.m2.l1.e3
तैयार

यह प्रोग्राम क्या प्रिंट करता है?

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)
} else {
    fmt.Println("else:", x)
}
fmt.Println("dopo:", x)
उत्तर विकल्प

संक्षिप्त

  • कोष्ठक के बिना स्थितियाँ, ब्रेसिज़ हमेशा अनिवार्य।
  • शर्त bool होनी चाहिए: कोई अंतर्निहित सत्यता नहीं।
  • Init if v, err := f(); err == nil { ... } v और err के दायरे को सीमित करता है।
  • इनिट में शैडोइंग: सावधान रहें कि बाहरी वेरिएबल्स को शैडो न करें।
  • कोई टर्नरी नहीं: एक विस्तारित if/else लिखें।