دستور Switch
در سی شارپ ساختاری به نام switch وجود دارد که به شما اجازه میدهد که با توجه به مقدار ثابت یک متغیر چندین انتخاب داشته باشید. دستور switch معادل دستور if تو در تو است با این تفاوت که در دستور switch متغیر فقط مقادیر ثابتی از اعداد، رشتهها و یا کاراکترها را قبول میکند. مقادیر ثابت مقادیری هستند که قابل تغییر نیستند. در زیر نحوه استفاده از دستور switch آمده است :
switch (testVar) { case compareVal1: code to execute if testVar == compareVa11; break; case compareVa12: code to execute if testVar == compareVa12; break; . . . case compareVa1N: code to execute if testVer == compareVa1N; break; default: code to execute if none of the values above match the testVar; break; }
ابتدا یک مقدار در متغیر switch که در مثال بالا testVar است قرار میدهید. این مقدار با هر یک از عبارتهای case داخل بلوک switch مقایسه میشود. اگر مقدار متغیر با هر یک از مقادیر موجود در دستورات case برابر بود کد مربوط به آن case اجرا خواهد شد. به این نکته توجه کنید که حتی اگر تعداد خط کدهای داخل دستور case از یکی بیشتر باشد نباید از آکولاد استفاده کنیم. آخر هر دستور case با کلمه کلیدی break تشخیص داده میشود که باعث میشود برنامه از دستور switch خارج شده ودستورات بعد از آن اجرا شوند. اگر این کلمه کلیدی از قلم بیوفتد برنامه با خطا مواجه میشود. دستور switch یک بخش default دارد. این دستور در صورتی اجرا میشود که مقدار متغیر با هیچ یک از مقادیر دستورات case برابر نباشد. دستور default اختیاری است و اگر از بدنه switch حذف شود هیچ اتفاقی نمیافتد. مکان این دستور هم مهم نیست اما بر طبق تعریف آن را در پایان دستورات مینویسند. به مثالی در مورد دستور switch توجه کنید :
using System; public class Program { public static void Main() { int choice; Console.WriteLine("What's your favorite pet?"); Console.WriteLine("[1] Dog"); Console.WriteLine("[2] Cat"); Console.WriteLine("[3] Rabbit"); Console.WriteLine("[4] Turtle"); Console.WriteLine("[5] Fish"); Console.WriteLine("[6] Not in the choices"); Console.Write("nEnter your choice: "); choice = Convert.ToInt32(Console.ReadLine()); switch (choice) { case 1: Console.WriteLine("Your favorite pet is Dog."); break; case 2: Console.WriteLine("Your favorite pet is Cat."); break; case 3: Console.WriteLine("Your favorite pet is Rabbit."); break; case 4: Console.WriteLine("Your favorite pet is Turtle."); break; case 5: Console.WriteLine("Your favorite pet is Fish."); break; case 6: Console.WriteLine("Your favorite pet is not in the choices."); break; default: Console.WriteLine("You don't have a favorite pet."); break; } } }
What's your favorite pet? [1] Dog [2] Cat [3] Rabbit [4] Turtle [5] Fish [6] Not in the choices Enter your choice: 2 Your favorite pet is Cat. What's your favorite pet? [1] Dog [2] Cat [3] Rabbit [4] Turtle [5] Fish [6] Not in the choices Enter your choice: 99 You don't have a favorite pet.
برنامه بالا به شما اجازه انتخاب حیوان مورد علاقهتان را میدهد. به اسم هر حیوان یک عدد نسبت داده شده است. شما عدد را وارد میکنید و این عدد در دستور switch با مقادیر case مقایسه میشود و با هر کدام از آن مقادیر که برابر بود پیغام مناسب نمایش داده خواهد شد. اگر هم با هیچ کدام از مقادیر case ها برابر نبود دستور default اجرا میشود. یکی دیگر از ویژگیهای دستور switch این است که شما میتوانید از دو یا چند case برای نشان داده یک مجموعه کد استفاده کنید. در مثال زیر اگر مقدار number عدد 1، 2 یا 3 باشد یک کد اجرا میشود. توجه کنید که case ها باید پشت سر هم نوشته شوند.
switch(number) { case 1: case 2: case 3: Console.WriteLine("This code is shared by three values."); break; }
همانطور که قبلاً ذکر شد دستور switch معادل دستور if تو در تو است. برنامه بالا را به صورت زیر نیز میتوان نوشت :
if (choice == 1) Console.WriteLine("Your favorite pet is Dog."); else if (choice == 2) Console.WriteLine("Your favorite pet is Cat."); else if (choice == 3) Console.WriteLine("Your favorite pet is Rabbit."); else if (choice == 4) Console.WriteLine("Your favorite pet is Turtle."); else if (choice == 5) Console.WriteLine("Your favorite pet is Fish."); else if (choice == 6) Console.WriteLine("Your favorite pet is not in the choices."); else Console.WriteLine("You don't have a favorite pet.");
کد بالا دقیقاً نتیجهای مانند دستور switch دارد. دستور default معادل دستور else میباشد. حال از بین این دو دستور (switch و if else) کدامیک را انتخاب کنیم. از دستور switch موقعی استفاده میکنیم که مقداری که میخواهیم با دیگر مقادیر مقایسه شود ثابت باشد. مثلاً در مثال زیر هیچگاه از switch استفاده نکنید.
int myNumber = 5; int x = 5; switch (myNumber) { case x: Console.WriteLine("Error, you can't use variables as a value" + " to be compared in a case statment."); break; }
مشاهده میکنید که با اینکه مقدار x عدد 5 است و به طور واضح با متغیر myNumber مقایسه شده است برنامه خطا میدهد چون x یک ثابت نیست بلکه یک متغیر است یا به زبان سادهتر، قابلیت تغییر را دارد. اگر بخواهید از x استفاده کنید و برنامه خطا ندهد باید از کلمه کلیدی const به صورت زیر استفاده کنید.
int myNumber = 5; const int x = 5; switch (myNumber) { case x: Console.WriteLine("Error has been fixed!"); break; }
از کلمه کلیدی const برای ایجاد ثابتها استفاده میشود. توجه کنید که بعد از تعریف یک ثابت نمیتوان مقدار آن را در طول برنامه تغییر داد. به یاد داشته باشید که باید ثابتها را حتماً مقداردهی کنید. دستور switch یک مقدار را با مقادیر case ها مقایسه میکند و شما لازم نیست که به شکل زیر مقادیر را با هم مقایسه کنید :
switch (myNumber) { case x > myNumber: Console.WriteLine("switch staments can't test if a value is less than " + "or greater than the other value."); break; }
سلام چطور یک متغیر را در یک case تعریف کنیم و مقدار آن را از کاربر بگیرم و در کیس بعد از آن مقدار که از کاربر گرفتیم استفاده کنیم
سلام ببخشید میخوام بعد از case +یا – یا * یا/ بگذارم باید چه کار کنم
سلام ببخشید من صفحه ای که لیست مطالب رایگان رو داره پیدا نمیکنم میشه لینکشو بدید ممنون میشم
http://www.w3-farsi.com/freeposts
سلام .ممنون خیلی کامل آموزش داده بودین.فقط یه سوال، منظورازاینکه مقدارجلوی دستورcase ثابت هست یعنی نمیتونیم شرطی بذاریم که مابین دومقدارباشه؟یامنظورصرفا استفاده نکردن ازمتغیرهاست؟
سلام، خواهش می کنم، بله همینطوره، خود دستور case در حکم دستور شرطیه، و نمیشه جلوش از یه شرط استفاده کرد.
بسیار عالی .سپاس
لطف دارین
خیلی ممنون که وقت میذارین و کامل جواب میدین
برای شما هم آرزوی موفقیت دارم
سلام و خسته نباشید
من تازه دیپلم گرفتم و الان تو یه آموزشگاه ، دوره برنامه نویسی رو میگذرونم
با اینکه درسم خوب بود ولی اونقدر ازین و اون شنیدم که تو دانشگاه عملی یادنمیدنو لیسانسا بیکارنو … ازین حرفا،بیخیال دانشگاه شدم و تو آموزشگاه ثبت نام کردم ک عملی یاد بگیرم.به نظرشما کار اشتباهی کردم؟اگه لیسانس نداشته باشم کار پیدا نمیکنم؟؟؟لطفا راهنماییم کنید
سلام دوست عزیز
از کجا بگم؟
اول اینکه برای موفقیت تحصیلات عالیه لازم نیست کما اینکه بیل گیتس همین چند وقت پیش لیسانس گرفت!!!
بنده خودم تازه الان 34 سالمه و ترم آخر لیسانس IT هستم. و همیشه همینو گفتم و میگم : کاش من بعد از دیپلم دو چیز یاد می گرفتم
1- زبان انگلیسی
2- یک زبان برنامه نویسی به صورت حرفه ای
اگه دوست دارین وارد ادارات بشین و ماهی 1 تومن بگیرین و وجهه اجتماعی داشته باشین درس دانشگاهی رو ادامه بدین، در غیر اینصورت اگه دنبال آینده خوب هستین و میخواین آقا بالا سر خودتون باشین یک چیز رو حرفه ای یاد بگیرن ( مثلا جوشکاری!!!!)
در کل عرض کنم اشتباه نکردین ولی می تونید یه فوق دیپلم با نمره ناپلئونی بگیرین و در کنار ش یک زبان برنامه نویسی به صورت حرفه ایی یاد بگیرین”.
هر شرکتی هم منتتون رو میکشه که بدون مدرک دانشگاهی برین واسشون کار کنید
موفق و موید باشین
سلام
میشه از دستور default استفاده نکنیم
آخه من برای برنامم اصلا حالت غیر از حالات case ندارم
آره. دستور default اختیاریه
عالی بود ممنون
درود
دوست عزیز سایت آموزشی خیلی خوبی دارید واقعا ممنون هستم.خواهش میکنم به هیچ وجه مثل بعضی از سایت ها نصفه کاره رها نکنید/
من سایتتون رو به هم کلاسی های خودم معرفی خواهم کرد چون با سی شارپ مشکل اساسی داریم.
سپاس
سلام دوست عزیز…ممنون از لطفتون…مطمئ باشین ، شاید دیر دیر مطلب بذارم ولی هرگز سایت رو رها نمی کنم و تا مرجع کامل شدنش ادامه می دم و در این راه به کمک شما دوستان عزیز نیاز دارم. همین لطف بزرگ رو در حق بنده بکنید کافیه،اینکه سایت بنده رو به دوستان و اساتیدتون معرفی کنید.
با تشکر