Go هم مانند زبانهای دیگر، دستور switch را در اختیار شما قرار میدهد.
دستور switch روشی کوتاهتر برای نوشتن دستورهای طولانی if ... else if است.
برای ساختن یک switch، ابتدا از کلیدواژهی switch استفاده میکنیم و بعد از آن یک مقدار یا عبارت میآوریم.
سپس هر یک از شرطها را با کلیدواژهی case اعلام میکنیم.
همچنین میتوانیم یک حالت default تعریف کنیم که وقتی هیچیک از شرطهای case پیشین برقرار نباشد، اجرا میشود:
operatingSystem := "windows"
switch operatingSystem {
case "windows":
// do something if the operating system is windows
case "linux":
// do something if the operating system is linux
case "macos":
// do something if the operating system is macos
default:
// do something if the operating system is none of the above
}
یک نکتهی جالب دربارهی دستور switch این است که میتوان مقدار بعد از کلیدواژهی switch را حذف کرد و برای هر case یک شرط «منطقی» نوشت:
age := 21
switch {
case age > 20 && age < 30:
// do something if age is between 20 and 30
case age == 10:
// do something if age is equal to 10
default:
// do something else for every other case
}
در این تمرین، اولین نوبت یک بازی Blackjack را شبیهسازی میکنیم.
شما دو کارت دریافت میکنید و میتوانید کارت روباز دیلر را ببینید. همهی کارتها با رشتهای مانند "ace"، "king"، "three"، "two" و غیره نمایش داده میشوند. ارزش هر کارت به این شرح است:
| کارت | ارزش | کارت | ارزش |
|---|---|---|---|
| ace | 11 | eight | 8 |
| two | 2 | nine | 9 |
| three | 3 | ten | 10 |
| four | 4 | jack | 10 |
| five | 5 | queen | 10 |
| six | 6 | king | 10 |
| seven | 7 | سایر | 0 |
نکته: معمولاً آسها میتوانند ارزش ۱ یا ۱۱ داشته باشند، اما برای سادگی فرض میکنیم که فقط ارزش ۱۱ را دارند.
بسته به دو کارت شما و کارت دیلر، برای نوبت اول بازی استراتژیای وجود دارد که در آن این گزینهها را دارید:
هرچند این استراتژی هنوز بهینه نیست، شما استراتژیای را دنبال میکنید که دوستتان Alex در حال توسعهی آن بوده است. این استراتژی به این صورت است:
تابعی پیادهسازی کنید که ارزش عددی یک کارت را محاسبه کند:
value := ParseCard("ace")
fmt.Println(value)
// Output: 11
تابعی بنویسید که منطق تصمیمگیری توصیفشده در بالا را پیادهسازی کند:
func FirstTurn(card1, card2, dealerCard string) string
در ادامه چند نمونه از نتایج مورد انتظار را میبینید:
FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"