ماڈیول اسباق (4/5)
محاوراتی سوئچ
Go's switch C/Java کے مقابلے میں زیادہ ایرگونومک ہے: ہر ایک case کے پاس ہے
اپنا مضمر بلاک (لکھنے کے لیے کوئی break نہیں)، آپ گروپ بنا سکتے ہیں۔
کوما کے ساتھ متعدد اقدار، اور ایک switch بغیر اظہار کے برتاؤ کرتا ہے
زیادہ پڑھنے کے قابل if/else if سلسلہ کی طرح۔
قدر کو آن کریں۔
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 زنجیروں کا محاوراتی متبادل ہے:
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 بھی ایک ابتدائی بیان قبول کرتا ہے:
switch n := len(s); {
case n == 0:
fmt.Println("vuoto")
case n > 100:
fmt.Println("lungo")
default:
fmt.Println("ok")
}n صرف سوئچ کے اندر موجود ہے۔
واضح fallthrough
اگر آپ واقعی اگلے کیس میں پھانسی دینا چاہتے ہیں، تو آپ کو یہ لکھنا ہوگا:
switch 1 {
case 1:
fmt.Println("uno")
fallthrough
case 2:
fmt.Println("due") // anche questo viene stampato
case 3:
fmt.Println("tre") // questo no
}ٹائپ سوئچ (پیش نظارہ)
یہ آپ کو انٹرفیس کی متحرک قسم کی بنیاد پر امتیاز کرنے دیتا ہے۔ قدر ہم اسے انٹرفیس ماڈیول میں گہرائی میں ڈھانپیں گے:
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)
}اسے آزمائیں
lun/mar/mer/gio/ven کے لیے 'feriale' پرنٹ کریں، 'ویک اینڈ' بصورت دیگر، g کی قدر پر سوئچ کا استعمال کرتے ہوئے۔
اشارہ دکھائیں۔
5 ہفتے کے دنوں کو کوما سے الگ کرکے ایک کیس میں گروپ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
x پر منحصر 'neg'، 'zero' یا 'pos' پرنٹ کرنے کے لیے بغیر کسی شرط کے سوئچ کا استعمال کریں۔
اشارہ دکھائیں۔
`switch` کے بعد کوئی اظہار نہیں، صرف `{`۔
3 کوششوں کے بعد حل دستیاب ہے۔
یہ پروگرام کیا پرنٹ کرتا ہے؟
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)ٹائپ کریں۔