مرکزی مواد پر جائیں
ماڈیول 2 · سبق 1 از 5کورس میں 6/50~10 min
ماڈیول اسباق (1/5)

if، else، اور init بیانات

گو میں if نحو کلاسک ہے لیکن دو اہم اختلافات کے ساتھ C/Java کے مقابلے: حالت کے ارد گرد کوئی قوسین نہیں، اور ایک عارضی متغیر کا براہ راست if میں اعلان کرنے کی صلاحیت (init بیان)۔

بنیادی نحو

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

ابتدائی بیان: دائرہ کار 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 کے ذریعے "shadowed" ہو جاتا ہے، اندر اگر مقامی ورژن جیت جاتا ہے۔ اس کے فوراً بعد، بیرونی دوبارہ ابھرتا ہے۔

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

کوئی ٹرنری آپریٹر نہیں ہے۔

Go میں کوئی 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 کی قدر کے لحاظ سے 'positivo'، 'zero' یا 'negativo' پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

نشان پر شرائط کے ساتھ `if/else if/else` سلسلہ۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#go.m2.l1.e2
کوششیں: 0لوڈ ہو رہا ہے…

if میں v := 42 کا اعلان کرنے کے لیے init سٹیٹمنٹ کا استعمال کریں اور صرف v >= 18 پر پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

نحو: `if 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)
جواب کے اختیارات

Recap

  • قوسین کے بغیر شرائط، منحنی خطوط وحدانی ہمیشہ لازمی ہے۔
  • شرط bool ہونی چاہئے: کوئی واضح سچائی نہیں۔
  • Init if v, err := f(); err == nil { ... } v اور err کے دائرہ کار کو محدود کرتا ہے۔
  • init میں سایہ کرنا: محتاط رہیں کہ بیرونی متغیرات کو سایہ نہ کریں۔
  • کوئی ٹرنری نہیں: ایک توسیع شدہ if/else لکھیں۔