• مقدمه

پروژه‌ی تکمیل شده‌ی ماشین‌حساب را که به‌خاطر دارید؟ یک پروژه‌ی نسبتاً خوبی بود برای اینکه هرآنچه را که در سی‌شارپ یادگیرفتید، به‌صورت کاربردی نیز فرابگیرید.

اما یک مشکلی کوچکی در پروژه‌ی سی‌شارپ ما وجود داشت؛ آن هم عدم بهینه بودن کدهاست. یادتان باشد که یک برنامه‌نویس تنها وظیفه‌اش تنها برنامه‌نویسی نیست؛ بلکه بهینه‌سازی برنامه به بهترین نحو نیز جزو یکی از مهمات است که باید همیشه در نظر داشته باشد. باید سعی کنید همیشه کدهایتان را منظم‌تر، بهینه‌تر و قابل خواندن بنویسید.

در این بخش از آموزش ما با دستور جدیدی آشنا خواهیم شد که کدهایمان را به نحوی، سازمان‌دهی می‌کند.

  • دستور Switch – Case

یکی از راه‌های راحت‌تری که می‌توانیم با آن ماشین‌حساب خودمان را تکمیل کنیم، استفاده از عبارت «Switch» به‌جای Else If های متوالی بود. دستور Switch به شما این قابلیت را می‌دهد که بتوانید چندین حالت را برای یک شی‌ء چک کنیم و برای هر کدام یک دستور جداگانه‌ای تعریف کنیم. (دقیقاً شبیه Else If های متوالی است.( ساختمان و ساختار دستور Switch به شکل زیر است:

1-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 مربوط به عمل مساوی قرار می‌دهیم، تعیین می‌کنیم که کاربر در هنگامی که کلید مساوی را کلیک کند، کدام عمل ریاضی را انتخاب کرده بود. به کد زیر دقت کنید:

2-switch2

در بین پرانتزهای 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) می‌باشد، از شما خوانندگان و بازدیدکنندگان عزیز خواهشمندم که نظرات سازنده، پیشنهادات و انتقادات خودتان را در بخش نظرات همین مطلب به اطلاع بنده برسانند.

نظرات کاربران
اشتراک در
اطلاع از
23 نظرات
Reza
13 سال قبل

مرسی

rayan
13 سال قبل

سلام
واقعا خسته نباشید.
از آموزش بسیار بسیار مفید و روش جالب برای آموزش برنامه نویسی نهایت تشکر را دارم. منتظر بحث های جدید و پیشرفته تر آن هستم .

فرنوش
13 سال قبل

سلام.
ازتون ممنونم که به مطالب آموزشی سی شارپ سرعت دادید.
باتشکر

شهرام احتشام
13 سال قبل

از روش آموزشتون بسیار سپاسگزارم.همچنان امیدوارم تامباحث پیشرفته آموزشتون ادامه داشته باشه تا بالاخره این زبان رو یاد بگیریم.ممنون

میلاد
13 سال قبل

داداش دمت گرم
خیلی ممنون که اینقدر قشنگ داری درس میدی
من چند تا کتاب واسه آموزش گرفتم ولی هیچکدوم به خوبی تو نبودن :D
به کارت ادامه بده

nima101
13 سال قبل

آقای موسوی نحوه آموزش شما واقعا برای من مفیده ، امیدوارم که همینطور ادامه بدید.
ازتون یه خواهش دارم
لطفا مارو از این سردرگمی نجات بدبد و راهنماییمون کنید و بگید برای یادگیری سی شارپ بهتره چه کتاب یا کتابایی رو مطالعه کنیم
من با توجه به جستجوهایی که کردم نتونستم جواب مناسبی بگیرم
منتظر نظر مفید شما هستم

nima101
13 سال قبل

آقای موسوی اگر تائید میکنید که این کتاب ویرایش پنجم همون کتابی هست که شما فرمودید،من با اجازه شما لینک دانلودشو اینحا میذارم تا بقیه دوستان هم بتونن ازش استفاده کنن:
C# 5.0 in a Nutshell, 5th Edition
http://it-ebooks.info/book/831/

parisa
13 سال قبل

سلام و بازم ممنون از آموزشتون

من این پروژه ماشین حساب رو انجام دادم، اما در آخر که مساوی رو کلیک میکنم، پاسخ صفر میشه!!! برای هر چهار عملگر همینه.

نمیدونم چرا!!! ممنون میشم اگه راهنماییم کنین :)

فرناز
پاسخ به  Jeff Mosawy
13 سال قبل

من واسه سه شنبه به یه ماشین حساب با 4 عمل اصلی احتیاج دارم
متاسفانه موفق نبودم
همیشه یه جای کار میلنگه
: (

sepehr
13 سال قبل

سلام مهندس خوبی ؟؟
ممنون از سایت پر محتوا و عالی که داری
چطوری میتونم برنامه ای با سی شارپ بنویسم که حداکثر بتونه عدد 4 رقمی بگیره یعنی بین صفر و 9999 و هر عددی هم میگیره عنوان کنه که چند رقمی هست . مثلا 20 را میگیره بگه دو رقمی 358 را میگیره بگه 3 رقمی اما مثلا 10000که 5 رقمی هست بگیره وپیغام خطا بده

bibic
13 سال قبل

من سایت آموزشی زیاد دیدم ولی همشون دنبال یه جورائی منفعت خودشون بودن،ممنونم بی مزد و منت دارید زحمت می کشید.امیدوارم هرچی از خدا میخواید بهترینشو بهتون بده.ممنونم.

ebrahim
13 سال قبل

با سلام ممنون از اموزشهای خوبتان بخش ۱۶و ۱۹ وجوده نداره

ضحی
12 سال قبل

سلام
ممنون از آموزش خوبتون!
تا اینجا که خیلی مفید بوده
موفق باشید!

محمد شمس
11 سال قبل

سلام به همه عزیزان

من یک سوال اساسی دارم، خواهش می کنم هرکس کمکی ازش برمیاد راهنماییم کنه!
خیلی به برنامه نویسی علاقه دارم
برای شروع کلی گشتم و جستجو کردم تا یک زبون مناسب رو انتخاب کنم
نتیجه جستجو شد زبون برنامه نویسی سی شارپ
سوال من از شما دوستان اینه که برای حرفه ای شدن توی سی شارپ بهترین نقطه شروع کجاست؟
چه مسیری رو و چطور طی کنم یا یک برنامه نویس حرفه ای سی شارپی بشم
؟
با تشکر از همه دوستان
در پناه حق

sadegh_al
11 سال قبل

سلام خیلی ممنون از توضیح خوبتون. من یه سوال داشتم اگه بخوایم داخل این caseها یه سری عملیات ریاضی تعریف کنیم، مثلا بگیم اگه داخل این case رفتی سرعت رو به فلان مقدار برسون و چند ثانیه با همین سرعت ادامه بده بعد برو کیس بعدی. همه رو میشه تو همین کیس ها نوشت؟ یا باید جای دیگه باشه؟

AmirWizard
10 سال قبل

سلام خیلی ممنون بابت مطالب مفیدتون در باره آموزش #C

فقط از جلسه ۷۳ به بعد هم اگه میشه ادامش رو قرار بدید :)

بازم متشکرم از آموزش های گرامیتان :)

محمد
10 سال قبل

سلام خسته نباشید .
ایا می توان در() case یک عملیات ریاضی قرار داد؟ مثلا (۱۰>x> ) case .