آموزش سیشارپ C# – بخش ۱۷
- مقدمه
پروژهی تکمیل شدهی ماشینحساب را که بهخاطر دارید؟ یک پروژهی نسبتاً خوبی بود برای اینکه هرآنچه را که در سیشارپ یادگیرفتید، بهصورت کاربردی نیز فرابگیرید.
اما یک مشکلی کوچکی در پروژهی سیشارپ ما وجود داشت؛ آن هم عدم بهینه بودن کدهاست. یادتان باشد که یک برنامهنویس تنها وظیفهاش تنها برنامهنویسی نیست؛ بلکه بهینهسازی برنامه به بهترین نحو نیز جزو یکی از مهمات است که باید همیشه در نظر داشته باشد. باید سعی کنید همیشه کدهایتان را منظمتر، بهینهتر و قابل خواندن بنویسید.
در این بخش از آموزش ما با دستور جدیدی آشنا خواهیم شد که کدهایمان را به نحوی، سازماندهی میکند.
- دستور 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) میباشد، از شما خوانندگان و بازدیدکنندگان عزیز خواهشمندم که نظرات سازنده، پیشنهادات و انتقادات خودتان را در بخش نظرات همین مطلب به اطلاع بنده برسانند.
مرسی
سلام
واقعا خسته نباشید.
از آموزش بسیار بسیار مفید و روش جالب برای آموزش برنامه نویسی نهایت تشکر را دارم. منتظر بحث های جدید و پیشرفته تر آن هستم .
سلام.
ازتون ممنونم که به مطالب آموزشی سی شارپ سرعت دادید.
باتشکر
از روش آموزشتون بسیار سپاسگزارم.همچنان امیدوارم تامباحث پیشرفته آموزشتون ادامه داشته باشه تا بالاخره این زبان رو یاد بگیریم.ممنون
داداش دمت گرم
خیلی ممنون که اینقدر قشنگ داری درس میدی
من چند تا کتاب واسه آموزش گرفتم ولی هیچکدوم به خوبی تو نبودن 😀
به کارت ادامه بده
آقای موسوی نحوه آموزش شما واقعا برای من مفیده ، امیدوارم که همینطور ادامه بدید.
ازتون یه خواهش دارم
لطفا مارو از این سردرگمی نجات بدبد و راهنماییمون کنید و بگید برای یادگیری سی شارپ بهتره چه کتاب یا کتابایی رو مطالعه کنیم
من با توجه به جستجوهایی که کردم نتونستم جواب مناسبی بگیرم
منتظر نظر مفید شما هستم
سلام دوست عزیزم،
خوشحالم که از این سری آموزشها راضی هستید؛ برای من واقعاًارزشمند هستش.
ببینید، من همیشه یه کتابی رو به دوستان معرفی کردم، اینبار هم همون رو معرفی می:کنم. اینقدر اسم این کتاب رو اوردم الان فکر میکنید دارم تبلیغ میکنم و پولی دارم بابتش میگیرم! 😀
اول از همه بهتون پیشنهاد میکنم اصلاً بهدنبال منابع فارسی نرید، مگر اینکه انگلیسی شما واقعاً واقعاً ضعیف باشه و حتی جمله (What’s your name?) رو هم نمیتونید متوجه بشید.
اگر شما میخواید سیشارپ رو کامل کامل از مبتدی تا حرفهای یاد بگیرید، بهنظر من کتاب انتشارات O’Reilly خیلی عالی هستند، چونکه خودم تنها کتابی هست که خوندم و راضی بودم.
اما اگر میخواید به زبان انگلیسی ساده، مقدامات و لزومات سیشارپ رو در حد قابل قبول و شایدم بیشتر یاد بگیرید، همین منبع آموزشی خودم رو که HomeAndLearn.co.uk رو دنبال کنید.
موفق باشید!
آقای موسوی اگر تائید میکنید که این کتاب ویرایش پنجم همون کتابی هست که شما فرمودید،من با اجازه شما لینک دانلودشو اینحا میذارم تا بقیه دوستان هم بتونن ازش استفاده کنن:
C# 5.0 in a Nutshell, 5th Edition
http://it-ebooks.info/book/831/
ممنونم از شما.
اما کتابی که من خونده بودم، کتاب با عنوان «Programming C# 4.0» هست.
اما چونکه نسبتاً سیشارپ نسخه ۵ جدید هست، این کتاب رو انتشارات O’Reilly داده برای اونهایی که ظاهراً میخوان فقط سیشارپ ۵ رو یاد بگیرند. فکر میکنم این کتاب مباحث پایه رو پوشش نمیده. اگر بتونید اون عنوان کتاب رو تهیه بکنید بهنظرم بهتر هست.
سلام و بازم ممنون از آموزشتون
من این پروژه ماشین حساب رو انجام دادم، اما در آخر که مساوی رو کلیک میکنم، پاسخ صفر میشه!!! برای هر چهار عملگر همینه.
نمیدونم چرا!!! ممنون میشم اگه راهنماییم کنین 🙂
سلام دوست عزیز،
خواهش میکنم، من هم از نظر لطفتون ممنونم! والا من که نمیتونم حدس بزنم که مشکل کار شما کجا بوده، شما یکبار دیگر بررسی کنید آموزش رو، انشاءالله که حل بشه مشکل.
باز هم اگر مشکلی بود من در خدمت شما هستم.
من واسه سه شنبه به یه ماشین حساب با 4 عمل اصلی احتیاج دارم
متاسفانه موفق نبودم
همیشه یه جای کار میلنگه
: (
سلام دوست عزیز،
توی بخش های آموزشی سیشارپ، یک مطالب کامل همراه با ساختن ماشین حساب کامل با چهار عمل اصلی وجود دارد. توی اینترنت هم در رابطه با این مسئله به تعداد کافیای مطالب وجود دارد.
موفق باشید!
سلام مهندس خوبی ؟؟
ممنون از سایت پر محتوا و عالی که داری
چطوری میتونم برنامه ای با سی شارپ بنویسم که حداکثر بتونه عدد 4 رقمی بگیره یعنی بین صفر و 9999 و هر عددی هم میگیره عنوان کنه که چند رقمی هست . مثلا 20 را میگیره بگه دو رقمی 358 را میگیره بگه 3 رقمی اما مثلا 10000که 5 رقمی هست بگیره وپیغام خطا بده
سلام عزیزم،
یک راه خیلی ساده که با آنچه تا حالا توی آموزشهای خودمون داشتیم، استفاده از عملگر % میباشد. عملگر % عملگری هست که باقی رو به ما میده، یعنی مثلاً اگر بنویسیم ۱۵۰ % ۱۰۰ ، مییاد تقسیم دو عدد رو انجام میده (تقسیم صحیح) و بعدش مقدار باقیمانده رو میده. اما باقیمانده یک خاصیت داره و اون هم اینه که اگر هر عددی رو بر ۱۰ تقسیم کنی، یک رقم یک رقم از آخر حذف میشه تا اینکه برسه به چندگانها. خوب شما با استفاده از حلقه While و IF، متوجه بشید که عدد چند رقمی بوده.
نیازی به توضیح بیشتری اگر داشتید، من در خدمت شما هستم.
موفق باشید!
من سایت آموزشی زیاد دیدم ولی همشون دنبال یه جورائی منفعت خودشون بودن،ممنونم بی مزد و منت دارید زحمت می کشید.امیدوارم هرچی از خدا میخواید بهترینشو بهتون بده.ممنونم.
با سلام ممنون از اموزشهای خوبتان بخش ۱۶و ۱۹ وجوده نداره
سلام دوست عزیزم،
از منوی بالا، بخش آموزش برنامهنویسی اگر مراجعه بفرمایید، میتوانید به تمامی بخشهای آموزش دسترسی پیدا کنید.
آموزشها تا به امروز، تا بخش ۴۵ام آماده شده است.
موفق باشید!
سلام
ممنون از آموزش خوبتون!
تا اینجا که خیلی مفید بوده
موفق باشید!
سلام به همه عزیزان
من یک سوال اساسی دارم، خواهش می کنم هرکس کمکی ازش برمیاد راهنماییم کنه!
خیلی به برنامه نویسی علاقه دارم
برای شروع کلی گشتم و جستجو کردم تا یک زبون مناسب رو انتخاب کنم
نتیجه جستجو شد زبون برنامه نویسی سی شارپ
سوال من از شما دوستان اینه که برای حرفه ای شدن توی سی شارپ بهترین نقطه شروع کجاست؟
چه مسیری رو و چطور طی کنم یا یک برنامه نویس حرفه ای سی شارپی بشم
؟
با تشکر از همه دوستان
در پناه حق
سلام خیلی ممنون از توضیح خوبتون. من یه سوال داشتم اگه بخوایم داخل این caseها یه سری عملیات ریاضی تعریف کنیم، مثلا بگیم اگه داخل این case رفتی سرعت رو به فلان مقدار برسون و چند ثانیه با همین سرعت ادامه بده بعد برو کیس بعدی. همه رو میشه تو همین کیس ها نوشت؟ یا باید جای دیگه باشه؟
سلام خیلی ممنون بابت مطالب مفیدتون در باره آموزش #C
فقط از جلسه ۷۳ به بعد هم اگه میشه ادامش رو قرار بدید 🙂
بازم متشکرم از آموزش های گرامیتان 🙂
سلام خسته نباشید .
ایا می توان در() case یک عملیات ریاضی قرار داد؟ مثلا (۱۰>x> ) case .