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

محاوراتی سوئچ

Go's switch C/Java کے مقابلے میں زیادہ ایرگونومک ہے: ہر ایک case کے پاس ہے اپنا مضمر بلاک (لکھنے کے لیے کوئی break نہیں)، آپ گروپ بنا سکتے ہیں۔ کوما کے ساتھ متعدد اقدار، اور ایک switch بغیر اظہار کے برتاؤ کرتا ہے زیادہ پڑھنے کے قابل if/else if سلسلہ کی طرح۔

قدر کو آن کریں۔

Go
giorno := "mar"
switch giorno {
case "lun", "mar", "mer", "gio", "ven":
    fmt.Println("feriale")
case "sab", "dom":
    fmt.Println("weekend")
default:
    fmt.Println("sconosciuto")
}

case کوما سے الگ کی گئی متعدد اقدار کو قبول کرتا ہے اور اس میں کوئی مضمر نہیں ہے fallthrough: جیسے ہی کوئی کیس چلتا ہے، سوئچ باہر نکل جاتا ہے۔

بغیر کسی شرط کے سوئچ کریں۔

اگر آپ اظہار کو چھوڑ دیتے ہیں، تو سوئچ true کا اندازہ کرتا ہے اور ہر ایک case ہے bool حالت۔ یہ لمبی if/else if زنجیروں کا محاوراتی متبادل ہے:

Go
switch {
case x < 0:
    fmt.Println("negativo")
case x == 0:
    fmt.Println("zero")
case x < 10:
    fmt.Println("piccolo")
default:
    fmt.Println("grande")
}

ابتدائی بیان

جیسا کہ if کے ساتھ، switch بھی ایک ابتدائی بیان قبول کرتا ہے:

Go
switch n := len(s); {
case n == 0:
    fmt.Println("vuoto")
case n > 100:
    fmt.Println("lungo")
default:
    fmt.Println("ok")
}

n صرف سوئچ کے اندر موجود ہے۔

واضح fallthrough

اگر آپ واقعی اگلے کیس میں پھانسی دینا چاہتے ہیں، تو آپ کو یہ لکھنا ہوگا:

Go
switch 1 {
case 1:
    fmt.Println("uno")
    fallthrough
case 2:
    fmt.Println("due")  // anche questo viene stampato
case 3:
    fmt.Println("tre")  // questo no
}

ٹائپ سوئچ (پیش نظارہ)

یہ آپ کو انٹرفیس کی متحرک قسم کی بنیاد پر امتیاز کرنے دیتا ہے۔ قدر ہم اسے انٹرفیس ماڈیول میں گہرائی میں ڈھانپیں گے:

Go
var i interface{} = "ciao"
switch v := i.(type) {
case int:
    fmt.Println("int:", v)
case string:
    fmt.Println("string:", v)
default:
    fmt.Printf("tipo %T\n", v)
}

اسے آزمائیں

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

lun/mar/mer/gio/ven کے لیے 'feriale' پرنٹ کریں، 'ویک اینڈ' بصورت دیگر، g کی قدر پر سوئچ کا استعمال کرتے ہوئے۔

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

5 ہفتے کے دنوں کو کوما سے الگ کرکے ایک کیس میں گروپ کریں۔

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

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

x پر منحصر 'neg'، 'zero' یا 'pos' پرنٹ کرنے کے لیے بغیر کسی شرط کے سوئچ کا استعمال کریں۔

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

`switch` کے بعد کوئی اظہار نہیں، صرف `{`۔

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

Quiz#go.m2.l4.e3
تیار

یہ پروگرام کیا پرنٹ کرتا ہے؟

Go
switch 1 {
case 1:
    fmt.Print("a")
case 2:
    fmt.Print("b")
}
جواب کے اختیارات

Recap

  • case کوما سے الگ کی گئی متعدد اقدار کو قبول کرتا ہے۔
  • کوئی مضمر فال تھرو نہیں: ہر کیس کا اپنا مضمر break ہوتا ہے۔
  • switch { ... } بغیر کسی اظہار کے = زیادہ پڑھنے کے قابل if/else if سلسلہ۔
  • ابتدائی بیان: switch x := f(); { ... }، دائرہ کار بلاک تک محدود ہے۔
  • fallthrough موجود ہے لیکن نایاب ہے؛ اس کی حالت کا اندازہ کیے بغیر اگلے کیس میں داخل ہوتا ہے۔
  • ڈائنامک قسم (انٹرفیس ماڈیول) کی بنیاد پر امتیاز کرنے کے لیے سوئچ v := i.(type) ٹائپ کریں۔