متفاوت ترین مجله اینترنتی ...

آموزش سی‌شارپ C# – بخش ۱۷

23
  • مقدمه

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

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

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

  • دستور 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 دیدگاه
  1. Reza می‌گوید

    مرسی

  2. rayan می‌گوید

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

  3. فرنوش می‌گوید

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

  4. شهرام احتشام می‌گوید

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

  5. میلاد می‌گوید

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

  6. nima101 می‌گوید

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

    1. Jeff Mosawy می‌گوید

      سلام دوست عزیزم،
      خوشحالم که از این سری آموزش‌ها راضی هستید؛ برای من واقعاً‌ارزشمند هستش.
      ببینید، من همیشه یه کتابی رو به دوستان معرفی کردم، این‌بار هم همون رو معرفی می‌:کنم. اینقدر اسم این کتاب رو اوردم الان فکر می‌کنید دارم تبلیغ می‌کنم و پولی دارم بابتش می‌گیرم! 😀
      اول از همه بهتون پیشنهاد می‌کنم اصلاً به‌دنبال منابع فارسی نرید، مگر اینکه انگلیسی شما واقعاً واقعاً ضعیف باشه و حتی جمله (What’s your name?) رو هم نمی‌تونید متوجه بشید.

      اگر شما می‌خواید سی‌شارپ رو کامل کامل از مبتدی تا حرفه‌ای یاد بگیرید، به‌نظر من کتاب انتشارات O’Reilly خیلی عالی هستند، چونکه خودم تنها کتابی هست که خوندم و راضی بودم.
      اما اگر می‌خواید به زبان انگلیسی ساده، مقدامات و لزومات سی‌شارپ رو در حد قابل قبول و شایدم بیشتر یاد بگیرید، همین منبع آموزشی خودم رو که HomeAndLearn.co.uk رو دنبال کنید.

      موفق باشید!

  7. nima101 می‌گوید

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

    1. Jeff Mosawy می‌گوید

      ممنونم از شما.
      اما کتابی که من خونده بودم، کتاب با عنوان «Programming C# 4.0» هست.
      اما چونکه نسبتاً سی‌شارپ نسخه ۵ جدید هست، این کتاب رو انتشارات O’Reilly داده برای اون‌هایی که ظاهراً می‌خوان فقط سی‌شارپ ۵ رو یاد بگیرند. فکر می‌کنم این کتاب مباحث پایه رو پوشش نمی‌ده. اگر بتونید اون عنوان کتاب رو تهیه بکنید به‌نظرم بهتر هست.

  8. parisa می‌گوید

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

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

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

    1. Jeff Mosawy می‌گوید

      سلام دوست عزیز،

      خواهش می‌کنم، من هم از نظر لطفتون ممنونم! والا من که نمی‌تونم حدس بزنم که مشکل کار شما کجا بوده، شما یکبار دیگر بررسی کنید آموزش رو، انشاءالله که حل بشه مشکل.
      باز هم اگر مشکلی بود من در خدمت شما هستم.

    2. فرناز می‌گوید

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

    3. Jeff Mosawy می‌گوید

      سلام دوست عزیز،

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

  9. sepehr می‌گوید

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

    1. Jeff Mosawy می‌گوید

      سلام عزیزم،

      یک راه خیلی ساده که با آنچه تا حالا توی آموزش‌های خودمون داشتیم، استفاده از عملگر % می‌باشد. عملگر % عملگری هست که باقی رو به ما می‌ده، یعنی مثلاً اگر بنویسیم 150 % 100 ، می‌یاد تقسیم دو عدد رو انجام می‌ده (تقسیم صحیح) و بعدش مقدار باقی‌مانده رو می‌ده. اما باقی‌مانده یک خاصیت داره و اون هم اینه که اگر هر عددی رو بر ۱۰ تقسیم کنی، یک رقم یک رقم از آخر حذف می‌شه تا اینکه برسه به چندگان‌ها. خوب شما با استفاده از حلقه While و IF، متوجه بشید که عدد چند رقمی بوده.
      نیازی به توضیح بیشتری اگر داشتید، من در خدمت شما هستم.

      موفق باشید!

  10. bibic می‌گوید

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

  11. ebrahim می‌گوید

    با سلام ممنون از اموزشهای خوبتان بخش 16و 19 وجوده نداره

    1. Jeff Mosawy می‌گوید

      سلام دوست عزیزم،

      از منوی بالا، بخش آموزش برنامه‌نویسی اگر مراجعه بفرمایید، می‌توانید به تمامی بخش‌های آموزش دسترسی پیدا کنید.
      آموزش‌ها تا به امروز، تا بخش ۴۵ام آماده شده است.
      موفق باشید!

  12. ضحی می‌گوید

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

  13. محمد شمس می‌گوید

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

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

  14. sadegh_al می‌گوید

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

  15. AmirWizard می‌گوید

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

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

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

  16. محمد می‌گوید

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

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.

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