switch
ویکیپدیا دستور switch را چنین توصیف میکند: «نوعی سازوکار کنترلی انتخاب که به مقدار یک متغیر یا عبارت اجازه میدهد جریان اجرای برنامه را تغییر دهد.»
این سازوکار شامل کلیدواژههای زیر است: switch، case، break و default.
در سادهترین حالت، این دستورها یک عبارت اولیه یا رشتهای را میآزمایند و بر پایهی مقدار آن تصمیمی میگیرند. برای نمونه:
string direction = GetDirection();
switch (direction)
{
case "left":
GoLeft();
break;
case "right":
GoRight();
break;
default:
MarkTime();
break;
}
در پیشرفتهترین حالت، تبدیل نوع به پایین به شکل case <Type> <variable>: و نگهبانها (when) را معرفی میکنند.
Animal animal = GetAnimal();
switch (animal)
{
case Dog canine:
case Coyote canine:
canine.Bark();
break;
case Cat cat when cat.HasOnly8Lives():
cat.IsCareful();
cat.Meow();
break;
case Cat cat:
cat.Meow();
break;
}
شما در حال توسعهی سیستمی هستید که به کارکنان وبسایت یک باشگاه فوتبال کمک میکند تا دربارهی مسابقهها گزارش بدهند. این سیستم میتواند جنبههای مختلف مسابقه را، چه داخل زمین و چه خارج از آن، تحلیل کند و آنها را به جریانی از رویدادها تبدیل کند.
این تیم تنها با آرایش ۴-۳-۳ بازی میکند و هرگز با تغییر قوانین در سال ۱۹۶۵ که تعویض بازیکن را مجاز میکرد موافق نبوده است، چه برسد به بزرگتر شدن فهرست بازیکنان.
توصیف بازیکنان به این صورت است:
1 -> "goalie"
2 -> "left back"
3 & 4 -> "center back"
5 -> "right back"
6, 7 & 8 -> "midfielder"
9 -> "left wing"
10 -> "striker"
11 -> "right wing"
متد استاتیک PlayAnalyzer.AnalyzeOnField() را پیادهسازی کنید تا بر اساس شمارهی پیراهن بازیکن، توصیف او را تولید کند.
PlayAnalyzer.AnalyzeOnField(10);
// => "striker"
متد PlayAnalyzer.AnalyzeOnField() را تغییر دهید تا وقتی شمارهی پیراهنی خارج از بازهی ۱ تا ۱۱ پردازش میشود، UNKNOWN را گزارش کند.
متد PlayAnalyzer.AnalyzeOffField() را پیادهسازی کنید تا توصیف فعالیتها و افراد حاضر در اطراف زمین بازی را تولید کند.
این متد انواع مختلفی از داده را دریافت میکند که باید تحلیل شوند و به متن مناسب تبدیل شوند تا به خبرنگاران کمک کنند.
برای شروع، دادههای مربوط به ورزشگاه را پوشش میدهیم:
int)string)انواع ناشناختهی داده نباید پردازش شوند، بنابراین اگر متد دادهای از نوعی متفاوت دریافت کند، باید رشتهی خالی برگردانده شود.
PlayAnalyzer.AnalyzeOffField(5000);
// => "There are 5000 supporters at the match."
PlayAnalyzer.AnalyzeOffField("5 minutes to go!");
// => "5 minutes to go!"
PlayAnalyzer.AnalyzeOffField(0.5);
// => ""
متد PlayAnalyzer.AnalyzeOffField() را تغییر دهید تا توصیف رخدادهایی را تولید کند که در طول مسابقه اتفاق میافتند.
رخدادها میتوانند هر زیرکلاسی از نوع Incident باشند و شامل توصیفی از رخداد خواهند بود.
آسیبدیدگیها نوع خاصی از رخداد هستند، چون باعث متوقف شدن مسابقه میشوند، پس باید به شکل متفاوتی با آنها برخورد شود.
PlayAnalyzer.AnalyzeOffField(new Foul());
// => "The referee deemed a foul."
PlayAnalyzer.AnalyzeOffField(new Injury(8));
// => "Oh no! Player 8 is injured. Medics are on the field."
متد PlayAnalyzer.AnalyzeOffField() را تغییر دهید تا مربیان باشگاهی را که در مسابقه حاضرند ذکر کند.
مربیان نمونههایی از نوع Manager هستند و یک اسم و اسم باشگاهی که مدیریت میکنند دارند.
ممکن است باشگاه مربی ناشناخته باشد که در این صورت روی null تنظیم میشود.
اگر باشگاه یک مربی مشخص نباشد، نباید بخشی از توصیف باشد.
PlayAnalyzer.AnalyzeOffField(new Manager("José Mário dos Santos Mourinho Félix", null));
// => "José Mário dos Santos Mourinho Félix"
PlayAnalyzer.AnalyzeOffField(new Manager("Jürgen Klopp", "Liverpool"));
// => "Jürgen Klopp (Liverpool)"