মূল কন্টেন্টে যান
মডিউল 2 · 4-এর পাঠ 5কোর্সে 9/50~10 min
মডিউল পাঠ (4/5)

ইডিওম্যাটিক সুইচ

Go-এর switch C/Java-এর চেয়ে বেশি ergonomic: প্রতিটি 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 কমা দ্বারা পৃথক করা একাধিক মান গ্রহণ করে এবং কোন অন্তর্নিহিত নেই ফলথ্রু: একটি মামলা কার্যকর হওয়ার সাথে সাথে সুইচটি প্রস্থান করে।

শর্ত ছাড়াই সুইচ করুন

আপনি অভিব্যক্তিটি বাদ দিলে, সুইচটি মূল্যায়ন করে 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")
}

Init বিবৃতি

if এর মতো, switchও একটি init বিবৃতি গ্রহণ করে:

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' প্রিন্ট করুন, 'weekend' অন্যথায়, g-এর মান চালু করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

কমা দ্বারা বিভক্ত একটি একক ক্ষেত্রে 5 সপ্তাহের দিনগুলিকে গোষ্ঠীভুক্ত করুন৷

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#go.m2.l4.e2
প্রচেষ্টা: 0লোড হচ্ছে...

x এর উপর নির্ভর করে 'neg', 'zero' বা 'pos' প্রিন্ট করতে শর্ত ছাড়াই একটি সুইচ ব্যবহার করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

`সুইচ` এর পরে কোনো অভিব্যক্তি নেই, শুধু `{`।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

Quiz#go.m2.l4.e3
প্রস্তুত

এই প্রোগ্রাম কি মুদ্রণ করে?

Go
switch 1 {
case 1:
    fmt.Print("a")
case 2:
    fmt.Print("b")
}
উত্তরের বিকল্প

রিক্যাপ

  • case কমা দ্বারা পৃথক করা একাধিক মান গ্রহণ করে।
  • কোন অন্তর্নিহিত পতন হয় না: প্রতিটি ক্ষেত্রের নিজস্ব অন্তর্নিহিত রয়েছে break৷
  • switch { ... } একটি অভিব্যক্তি ছাড়া = একটি আরও পাঠযোগ্য if/else if চেইন।
  • ইনিট স্টেটমেন্ট: switch x := f(); { ... }, সুযোগ ব্লকের মধ্যে সীমাবদ্ধ।
  • fallthrough বিদ্যমান কিন্তু বিরল; তার অবস্থার মূল্যায়ন না করেই পরবর্তী ক্ষেত্রে প্রবেশ করে।
  • ডায়নামিক টাইপের (ইন্টারফেস মডিউল) উপর ভিত্তি করে বৈষম্য করতে সুইচ v := i.(type) টাইপ করুন।