Jeff Mosawy
- مقدمه
پروژهی تکمیل شدهی ماشینحساب را که بهخاطر دارید؟ یک پروژهی نسبتاً خوبی بود برای اینکه هرآنچه را که در سیشارپ یادگیرفتید، بهصورت کاربردی نیز فرابگیرید.
اما یک مشکلی کوچکی در پروژهی سیشارپ ما وجود داشت؛ آن هم عدم بهینه بودن کدهاست. یادتان باشد که یک برنامهنویس تنها وظیفهاش تنها برنامهنویسی نیست؛ بلکه بهینهسازی برنامه به بهترین نحو نیز جزو یکی از مهمات است که باید همیشه در نظر داشته باشد. باید سعی کنید همیشه کدهایتان را منظمتر، بهینهتر و قابل خواندن بنویسید.
در این بخش از آموزش ما با دستور جدیدی آشنا خواهیم شد که کدهایمان را به نحوی، سازماندهی میکند.
- دستور Switch – Case
یکی از راههای راحتتری که میتوانیم با آن ماشینحساب خودمان را تکمیل کنیم، استفاده از عبارت «Switch» بهجای Else If های متوالی بود. دستور Switch به شما این قابلیت را میدهد که بتوانید چندین حالت را برای یک شیء چک کنیم و برای هر کدام یک دستور جداگانهای تعریف کنیم. (دقیقاً شبیه Else If های متوالی است.( ساختمان و ساختار دستور Switch به شکل زیر است:

بعد از کلمه Switch، شما یک جفت پرانتز خواهید گذاشت. در داخل پرانتز، شما چیزی را که میخواهید مقدارش را چک کنید را مینویسید. شما معمولاً مقادیر داخل یک متغیر را چک خواهید کرد. سپس شما یک جفت براکت قرار خواهید داد تا محدودهی مربوط به کدهای switch را مشخص کنید. در داخل Switch شما بهازای هر یک مقدار ممکنی که متغیر شما ممکن است داشته باشد، یک Case (=حالت) داشته باشید. پس از هر Case، شما کدهایی را مینویسید که اگر این حالت True باشد، (یعنی متغیر شما یکی از مقادیر مورد انتظار شما را داشته باشد) آن کد اجرا شود؛ و مابقی کدها بهصورت خودکار نادیده گرفته میشوند. نادیده گرفته شدن مابقی کدها توسط دستور Break که در آخر هر Case قرار دارد اتفاق میافتد. Break به سیشارپ میگوید که از این محدوده خارج شو! پس اگر Break را نگذارید، در عمل با مشکل مواجه خواهید شد.
پس ما هم با استفاده از این دستور، ماشینحساب خود را کدنویسی مجدد میکنیم.
ما در ماشینحساب، چهار متغیر از نوع Bool تعریف کردیم که بتوانیم با استفاده از مقادیر True یا False آنها، عمل ریاضی انتخاب شده را متوجه شویم و نتیجهی صحیحی را به کاربر ارائه دهیم. به جای اینکار، ما میتوانیم با تعریف یک متغیر از نوع String (مثلاً متغیر theOperator)، کاراکتر موجود در buttonهای مربوط به عملیات ریاضی را (یعنی کاراکتر جمع “+”، کاراکتر تفریق “-“، و …) هنگام انتخاب آن عمل ریاضی، در این متغیر ذخیره کنیم. چیزی شبیه کد زیر:
string theOperator;
private void btnPlus_Click(object sender, EventArgs e)
{
total1 = total1 + double.Parse(txtDisplay.Text);
txtDisplay.Clear();
theOperator = “+”;
}
ما با استفاده از کد بالا ( که در button مربوط به عمل جمع نوشته شده؛ بهجز تعریف متغیر که در خارج از همه تعریف شده است) توانستیم که کاری کنیم که کاربر با انتخاب عمل جمع، کاراکتر + در متغیر theOperator ذخیره شود. همین کارها را میتوانیم برای تمامی عملیات ریاضی خود انجام دهیم و فقط مقدار ذخیره شده در theOperator را تغییر دهیم.
حالا با استفاده از دستور Switch – Case که در button مربوط به عمل مساوی قرار میدهیم، تعیین میکنیم که کاربر در هنگامی که کلید مساوی را کلیک کند، کدام عمل ریاضی را انتخاب کرده بود. به کد زیر دقت کنید:

در بین پرانتزهای Switch، متغیر theOperator را قرار دهیم؛ چونکه میخواهیم مقدار ذخیره شده در این متغیر (حالتهایی که ما میدانیم در آن ذخیره میشود) را بررسی کنیم. تنها حالاتی که میتواند متغیر theOperator در خود ذخیره کند، علامتهای جمع، تفریق، ضرب یا تقسیم خواهد بود. پس برای اولین حالت خود (یعنی جمع) یک Case مینویسیم و پس آن یک جفت Double-Quotes قرار میدهیم و بین آن اولین حالت ممکن (یعنی کاراکتر حمع) را قرار میدهیم. سپس قبل از هر Break مخصوص به آن Case، عمل مورد انتظار ما، که در اینجا انجام عملیات جمع، تفریق، ضرب و یا تقسیم است را مینویسیم.
اگر در کد بالا دقت کنید، علاوه بر چهار حالت ممکن که برای هر کدام یک Case تعریف کردهایم، یک حالت Default وجود دارد. معمولاً بهتر است که در هنگام استفاده از Switch – Case، از Default نیز استفاده کنید. Default در واقع چیزی شبیه به دستور ELSE است؛ یعنی اگر هیچکدام از حالتهای بالا پیش نیامد (یعنی کاربر میخواست در برنامه خطا ایجاد کند و بدون اینکه کلیدهای حمع، تفریق، ضرب یا تقسیم را کلیک نزده و مستقیماً بر روی مساوی کلیک کرده) یک اتفاق خاصی بیفتد. مثلاً شما در چنین حالتی میتوانید یک MessageBox تعریف کنید و به کاربر بگویید که در هنگام کار با ماشینحساب دقت بیشتر کند.
فعلاً این جلسه به همینجا خاتمه داده میشود. فقط دقت کنید که Switch یکی از دستورات خیلی منظم و مفید در سیشارپ (و سایر زبانهای شبیه مثل C، C++ و …) است. هنگامی که حالتهای مختلفی برایتان پیش میآید، به جای استفاده از IF، ELSE IF های متوالی و ELSE، میتوانید از دستور Switch – Case استفاده کنید.
جهت دریافت این بخش آموزشی بهصورت فایل PDF، لطفاً بر روی اینجا کلیک کنید.
جهت ارزشیابی مطالب آموزشی سیشارپ که در حال تدوین و انتشار بر روی سایت گویا آیتی (GooyaIT.com) میباشد، از شما خوانندگان و بازدیدکنندگان عزیز خواهشمندم که نظرات سازنده، پیشنهادات و انتقادات خودتان را در بخش نظرات همین مطلب به اطلاع بنده برسانند.
