زنگ سی شارپ – قسمت ششم

آشنایی با دستور if و روند کنترلی و منطق برنامه


مسعود درویشیان ۳۲ دیدگاه سی شارپ یکشنبه, ۲ام مهر , ۱۳۹۱ 31482 بازدید

در قسمت قبل در مورد دیتا تایپ‌های کاراکتر و بولین صحبت شد، در این قسمت یکی از سرفصل‌های بسیار مهم سی شارپ را مورد بحث قرار می‌دهیم. در این قسمت از بولین استفاده‌ی زیادی می‌شود، پس اگر هنوز قسمت قبل را مطالعه نکرده اید، ابتدا به مطالعه قسمت قبل بپردازید.

زنگ سی‌شارپ - قسمت ششم

Program Control Statements

روند کنترلی و منطق برنامه، از مهم‌ترین قسمت‌های رفتار پویای یک زبان برنامه نویسی است. برای کنترل قسمت‌هایی از کد، سی شارپ دستورهای مخصوصی را فراهم کرده است تا برنامه نویس بتواند کنترل و منطق برنامه را در دست بگیرد. اکثر عبارت‌های شرطی و حلقه‌ای در #C از C و ++C می‌آیند.

سه دسته بندی برای Program Control Statement وجود دارد:

  • Selection Statements
  • Iteration Statements
  • Jump Statements

بخش Selection Statements شامل if و switch است و همین‌طور که از اسم آن مشخص است، در صورت داشتن شروط لازم عمل selection (انتخاب) را انجام می‌دهد. Iteration Statements شامل حلقه‌های  do-while، while، for و foreach هستند و عملیات تکرار (iteration) را انجام می‌دهند. Jump Statements هم شامل return، goto continue، break و throw است. هر کدام از این موارد مفصل توضیح داده می‌شوند. با توجه به اینکه اصطلاحات انگلیسی در مقالات زنگ سی شارپ بسیار هستند، به منظور دانستن هریک از اصطلاحات (اگر با زبان انگلیسی آشنایی کافی ندارید) پیشنهاد می‌شود از Google Translate ،Fast Dictionary یا Persian Dectionary استفاده کنید.

 The if statement

شما می‌توانید بخشی از یک برنامه را با استفاده از دستور شرطی if اجرا کنید. دستور if در سی شارپ از لحاظ syntax با سایر زبان‌های برنامه نویسی مثل C و ++C و جاوا مشابه است.

ساده ترین شکل دستور if بصورت زیر است:

if(condition) statement;

در اینجا condition یک عبارت بولی (true یا false) است. اگر condition شامل مقدار true باشد، آنگاه statement اجرا می‌شود. اگر condition شامل مقدار false باشد در این‌صورت statement کنار زده شده و اجرا نمی‌شود.

به نمونه ی زیر دقت کنید:

if (10 < 11) Console.WriteLine("10 is less than 11");

در این مورد، تا زمانی که ۱۰ از ۱۱ کوچک‌تر باشد، condition برابر مقدار true است و دستور ()Console.WriteLine اجرا می‌شود. نمونه ی زیر را ببینید:

if (10 < 9) Console.WriteLine("this won’t be displayed");

در این مورد، بدلیل اینکه ۱۰ از ۹ کوچک‌تر نیست condition شامل مقدار false می‌شود، بنابراین دستور ()Console.WriteLine اجرا نمی‌شود. همان‌طور که در قسمت پنجم ذکر شد عملگرهای مقایسه ای دو آیتم را با هم مقایسه می‌کنند، یک عبارت که شامل عملگر مقایسه ای است، یک مقدار بولین دارد. از اینرو می‌توان از عملگرهای مقایسه ای برای عبارت شرطی (condition) نیز استفاده کرد:

برنامه ی زیر چگونگی کار با دستور if را نشان می‌دهد:

// Demonstrate the if.
using System;
class IfDemo
{
    static void Main()
    {
        int a, b, c;
 
        a = 2;
        b = 3;
 
        if (a < b) Console.WriteLine("a is less than b");
 
        // This won’t display anything.
        if (a == b) Console.WriteLine("you won’t see this");
 
        Console.WriteLine();
 
        c = a - b; // c contains -1
 
        Console.WriteLine("c contains -1");
        if (c >= 0) Console.WriteLine("c is non-negative");
        if (c < 0) Console.WriteLine("c is negative");
 
        Console.WriteLine();
 
        c = b - a; // c now contains 1
        Console.WriteLine("c contains 1");
        if (c >= 0) Console.WriteLine("c is non-negative");
        if (c < 0) Console.WriteLine("c is negative");
    }
}

خروجی تولید شده توسط این برنامه:

a is less than b

c contains -1

c is negative

c contains 1

c is non-negative

همان‌طور که مشاهده می‌کنید با توجه به مقادیر متغیرها محاسباتی انجام می‌شود و سپس با توجه به مقدار بولینی که در قسمت condition قرار می‌گیرد، statement ها اجرا می‌شوند.

نکته: برای کوتاه تر شدن خط کد در این برنامه، namespace های اضافی را حذف کردیم و تنها از فضای‌نام system که برای مثال ما ضروری است استفاده کردیم. همچنین string[] args را از متد ()Main حذف کردیم. این‌ها به صورت پیش فرض توسط ویژوال استدیو نوشته می‌شوند و ممکن است در مواقعی که به آن‌ها نیازی نیست، حذف‌شان کنیم.

فرم کلی دستور if بدین شکل است:

if(condition) statement;
else statement;

این در صورتی است که شما برای قسمت‌های if یا else تنها یک statement دارید و نیازی نیست از بلاک (براکت باز و بسته) استفاده کنید. عبارت else اختیاری است. همچنین قسمت‌های if و else می‌توانند در یک بلاک قرار بگیرند. اگر برای هر کدام، یک statement داشته باشیم استفاده از بلاک اختیاری است، اما اگر برای هر کدام، بیشتر از یک statement داشته باشیم استفاده از بلاک اجباری است و فرم کلی آن بشکل زیر است:

if(condition)
{
    statement sequence
}
else
{
    statement sequence
}

در اینجا منظور از statement sequence دنباله ای از statement ها است. اگر condition شامل مقدار true باشد، آنگاه بلوک if اجرا می‌شود در غیر این‌صورت (اگر از عبارت else استفاده کرده باشیم) بلاک else اجرا می‌شود. هیچ‌گاه هر دو آن‌ها با هم اجرا نخواهند شد. در قسمت condition همیشه باید مقدار بولین تولید شود.

به نمونه‌ی زیر توجه کنید:

using System;
public class MyClass
{
    public static void Main()
    {
        int num1 = 6;
        int num2 = 23;

        int result = num1 + num2;

        if (result > 25)
        {
            Console.WriteLine("Result is more then 25");
        }
        else
        {
            Console.WriteLine("Result is less then 25");
        }
    }
}

در این مثال، مقدار متغیر num1 و num2 با هم جمع می‌شوند و نتیجه ی آن‌ها در متغیر result ذخیره می‌شود که نهایتاً result شامل مقدار ۲۹ می‌شود. همان‌طور که می‌بینید مقدار result با ۲۵ مقایسه شده است و می‌دانیم که پاسخ true است. بدلیل اینکه مقدار condition برابر با true شده است، بلاک if اجرا می‌شود و بلاک else نادیده گرفته شده و هیچ‌گاه اجرا نخواهد شد.

به نمونه ی بعدی توجه کنید:

using System;
public class ifDemo
{
    public static void Main()
    {
        if (2 + 2 == 5)
            Console.WriteLine("Does not compute");   // this won’t be displayed;
        else
            Console.WriteLine("This is False!");
    }
}

در این مثال، در قسمت condition، حاصل ۲ + ۲ که برابر با ۴ است، توسط عملگر مقایسه ای == با ۵ مقایسه می‌شود و همان‌طور که می‌دانید ۴ و ۵ باهم برابر نیستند، بنابراین مقدار condition برابر با false می‌شود. با این حساب بلاک دستور if اجرا نمی‌شود و بلاک دستور else اجرا خواهد شد.

نکته: همین‌طور که می‌بینید، هم if و هم else، به دلیل اینکه یک statement بیشتر ندارند، استفاده از بلاک (براکت باز و بسته) اختیاری است. در قسمت بعدی، شرح دستور if کامل می‌شود و بقیه ی بخش‌های Program Control Statement در قسمت‌های بعدی بیان می‌شود.


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



نویسنده / مترجم : مسعود درویشیان

علاقه مند به موسیقی و برنامه نویسی بازی


۳۲ دیدگاه برای این نوشته ثبت شده است


  1. پروانه
    ۳ مهر ۱۳۹۱

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



    • سلام

      ممنون از پیشنهادتون
      درسته که کنسول کاربرد نداره (البته در مواقع خاص کاربرد خودش رو هم داره) ولی امر مهم “یادگیری زبان برنامه‌نویسی سی‌شارپ” هست که هدف ما هم دقیقاً همینه و انتخاب کنسول به این دلیل بوده که یه محیط ایده‌آل و بدون پیش‌نیاز هست. وقتی شما زبان سی‌شارپ رو کامل یاد بگیرید دیگه فرقی نمی‌کنه که توی چه پلتفرمی می‌خواین کار کنین چون خیلی راحت می‌تونید با یه مطالعه مختصر و آشنایی با اون پلتفرم، برنامه‌ی مخصوص اون رو بنویسید. اگر قرار باشه ویندوز اپلیکیشن، موبایل، وب، بازی و یا هرچیزه دیگه‌ای کار کنید، تنها امر مهم همین هسته و اصل زبان برنامه‌نویسی هست. به‌عنوان مثال وقتی بحث از کلاس‌ها و متدها هست، هیچ فرقی نمی‌کنه که شما قصد دارید از اون توی چه محیطی استفاده کنید، بلکه چیزی که مهمه فهم شما از کلاس‌ها و متدها در سی‌شارپ هست.
      یه نکته‌ی خیلی خیلی جالب وجود داره و اون هم اینه که، وقتی شما یه زبان برنامه‌نویسی رو تا آخرش یاد برید و یاد بگیرید، اگر قصد داشته باشید یه زبان دیگه (مثلاً جاوا اسکریپت) رو یاد بگیرید، خیلی راحت می‌تونید این‌کارو انجام بدید چون اصل و منطق برنامه‌نویسی زبان‌ها تقریباً یکی هست و این فقط syntax اون‌هاست که متفاوته
      امیدوارم برای یادگیری سی‌شارپ تحمل و صبر دیدن این صفحه‌ی سیاه و کوچیک رو داشته باشید :)

      موفق باشید




  2. مجتبی
    ۳ مهر ۱۳۹۱

    سلام
    ممنون از وقتی که می ذارید.
    چند تا سوال:
    – کلاس اصلی هم مگه می تونه توی کلاس دیگه ای قرار بگیره؟ اگر بله چه فایده ای داره؟
    – این string[] args که حذف کردیم چه کاری انجام میده؟
    – لطفا اگر امکانش هست هدرها رو با زمان و کاربرداشون بگیدو مثلا الان هدر system برای چه کارایی باید قرار بگیره.
    – دوستمون و شما حرف هابی خوبی زدید. ولی مثلا من c++ رو توی دانشگاه یاد گرفتم و توی برخی مباحث برنامه نویسی با c# گیر دارم. مثلا گزارش گیری،تکنیک ها، دیتابیس و بهینه سازی اون، برنامه نویسی برای پلت فروم های مختلف و از این قبیل در نتیجه مقدمات کمی خسته کننده هست و اگر میشد در کنارش یه چیزایی هم در مورد این چیزا می گفتید بد نبود! فکر کنم منظور دوستمون هم همین بود!



    • سلام
      بله کلاس‌ها می‌تونن داخل هم قرار بگیرن، در مورد کلاس‌ها و متدها توی مقالات آینده بحث مفصلی داریم. string[] args هم توی مقالات آینده همراه با مثال توضیح خواهیم داد.
      namespace system برای استفاده از یه سری تایپ‌های پر استفاده توی دات‌نت فریم ورک هست. برای بعضی از کارها باید از namespace های دیگه هم استفاده کنیم که بعداً می‌بینید.
      به‌عنوان مثال، اگر using system رو بالای برنامه‌مون ننویسیم باید این‌طوری رفتار کنیم:

      System.Console.WriteLine();
      

      یا مثلاً برای تعریف int این‌کارو کنیم:

      System.Int32 i = 180; 
      

      بنابراین وقتی using system رو می‌نویسیم می‌تونیم مستقیماً به کلاس Console و یا int32 دسترسی داشته باشیم.




      • محمد
        ۳۰ مرداد ۱۳۹۳

        چرا این جا نمی تونیم بنویسیم اینت خالی وباید سی و دوشو هم بزاریم؟
        با تشکّر عالیه عالیه عالیه
        با خودم گفتم اگه شما نبودین چی کار می کردم.مطمئن باشین کارتون بی پاسخ نخواهد بود.
        خدا(قران):ان الله لا یضیع اجر المحسنین
        خدا پاداش محسنین را(حتما)خواهد داد




  3. علی حیدرزاده
    ۴ مهر ۱۳۹۱

    یه درخواست از مدیر سایت داشتم اگر امکان داره یه برنامه آموزشی بر اساس تاریخ ارائه درس ها بدید مثلا زنگ هفتم چهارشنبه، زنگ هشتم و…. اینطوری توی کلندر یادداشت میکنیم و براش برنامه ریزی میشه کرد. ممنون



    • فعلاً مقالات روزهای یک‌شنبه و چهارشنبه منتشر می‌شه
      اگه تغییری توی انتشار مقالات به‌وجود اومد اعلام می‌کنیم.




  4. داوود
    ۴ مهر ۱۳۹۱

    سلام؛ دستتون بابت وقتی که میذارید درد نکنه؛ دوستتون داریم.




  5. نسرین
    ۵ مهر ۱۳۹۱

    سلام
    واقعا ممنون از مطالبتون خیلی مفید بود من همه رو دنبال میکنم و امیدوارم که تداوم داشته باشه




  6. Alireza
    ۱۰ دی ۱۳۹۱

    واقعا دست شما درد نکنه عین درس استمادمونه. آقا واقعا به کارم اومد خیلی ممنونم.




  7. علیرضا
    ۵ بهمن ۱۳۹۱

    سلام .
    اقا اگه بخواییم یه شرط بزاریم که چندتا کار انجام بده بهنره از کدوم روش استفاده کنیم؟ یا اینکه از وردی فقط عدد یا کاراکتر بگیره باید چی کار کنیم؟.
    (ممنونم از سایت خیلی خوبی ک دارین)




  8. hoda
    ۵ بهمن ۱۳۹۱

    salam
    kheiliy mamno0n babate matalebeto0n




  9. nilgoon
    ۹ اسفند ۱۳۹۱

    سلام
    خیلی ممنون عالی توضیح دادید.
    من ترم پیش مبانی پاس کردم ولی تازه دارم میبینم مبانی یعنی چی:)
    مرسییییییییییییییییییییییییییییییییییییی خیلی خووووبید




  10. معین
    ۱۴ خرداد ۱۳۹۲

    salam khaste nabashid .ey kash hamrah ba kod nevisi ye site ro ham tarahi mikrdin ke behtr yad bgirim




  11. fatemeh
    ۱۱ تیر ۱۳۹۲

    سلام خیلی ممنونم واقعاخوب بود.فقط یه سوال من یه برنامه ی ماشین حساب با سی شارپ ویندوز نوشتم .برنامه اجرا میشه ولی خطا داره num1 = float.Parse(“textBox1.Text”)به این قسمتش ایراد میگیره بهش گفتم عددتوتکس باکس اومد توی نام ۱ نگهدار وبعد ادامه ی ماجرا.نمیدونم چیکار کنم یا چه کد آسونتری بنویسم.لطفا کمکم کنید.

    باتشکر




    • مسعود درویشیان
      ۱۳ تیر ۱۳۹۲

      چه خطایی می‌گیره؟




      • fatemeh
        ۱۳ تیر ۱۳۹۲

        سلام از فرمتش خطا میگیرهInput string was not in a correct format.بایه علامت زردرنگ




        • مسعود درویشیان
          ۱۳ تیر ۱۳۹۲

          این error به‌خاطر این هست که ورودی شما از نوع num1 نیست! مثلاْ اگر num1 از نوع int باشه، چیزی هم که توی input وارد می‌کنید باید int باشه تا parse بشه. بهتره از try-catch استفاده کنین که این مشکل به‌وجود نیاد یا اینکه به‌جای input از button استفاده کنین و عدد بذارید توی button ها و روی کلیک‌شون عدد رو بگیرید. همین‌طور می‌تونید به‌جای try-catch از متد ()int.TryParse استفاده کنید:

          int result=0;
          if(int.TryParse(textBox1.Text,out result))
          {
              // ...
          }
          



  12. fatemeh
    ۱۳ تیر ۱۳۹۲

    من بایدتوبرنامه نویسی سی شارپ تا یه ماه آینده به حدی برسم که هر پروژه ای که دادن بتونم کامپایل کنم الان همزمان هم مقالات شمارو میخونم هم کتاب مرجع قدم به قدم با سی شارپ ۲۰۰۸جان شارپ که به زبان اصلی هست وهم کتاب سی شارپ detelکه ترجمه پاشایی ومهدوی هست ولی واقعا تمرین های کتابش سخته ومن فصل پنجم هستم.شماکه یه برنامه نویس حرفه ای هستی راهنماییم کنید چطوری موفق ترم باتوجه با اینکه زبان انگلیسیم خیلی جالب نیست
    باتشکر




    • مسعود درویشیان
      ۱۳ تیر ۱۳۹۲

      پیشنهاد می‌کنم فعلاْ خودتون رو درگیر چندتا کتاب نکنید و بهتره یه کتاب خوب رو انتخاب کنید و تمومش کنید. همین‌طور روی زبان انگلیسی‌تون خیلی کار کنید چون به‌هرحال تا یه حد پایینی می‌تونید از منابع فارسی استفاده کنید بعدش دیگه باید کتاب و مقالات انگلیسی بخونید. یکم زمان و زحمت لازم داره، برنامه‌نویسی چیزی نیست که توی یه مدت زمان کم بشه به حد بالایی رسید. تنها چیزی که مهمه، داشتن علاقه، پشت‌کار و صبر هست. بازم تاکید می‌کنم انگلیسی خیلی مهمه، هرطوری که احساس می‌کنید براتون بهتره (کلاس زبان برید یا خودتون توی خونه کار کنید)، زبان‌تون رو قوی کنید.




  13. fatemeh
    ۱۳ تیر ۱۳۹۲

    ممنونم ازلطفتون الان بیشترتمرکزم روی ترجمه ویادگیری هست




  14. کوثر
    ۲۱ شهریور ۱۳۹۲

    بازم مثل همیشه خوب بود

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




  15. غول داس
    ۲۷ بهمن ۱۳۹۲


  16. سعید
    ۱۱ خرداد ۱۳۹۳

    خوب بود آقا مسعود




  17. محمد
    ۳۰ مرداد ۱۳۹۳

    اون قضیه پابلیک قبل از کلاس ها چیه؟؟؟




  18. Alireza98
    ۱۰ فروردین ۱۳۹۴

    با سلام
    آقا مسعود یه سوال داشتم:میشه یه دستوری با if ینویسید که تشخیص دهد یک عدد (مثل ۷)بین دوعدد دیگر (مثلا بین ۶و۱۰) قرار دارد یا خیر؟لطفا اگر میشه خیلی زود این دستور رو بهم بدید آخه خیلی لازمش دارم




  19. پیشگامان
    ۱۱ فروردین ۱۳۹۴

    با عرض سلام و خسته نباشید خدمت دوست گرامی –
    مقالاتی که نوشتید رو خوندم – اگر نظرتون مثبت باشه و اجازه بدید می خوام مقالات رو توی گروه فیسبوکی به آدرس زیر انتشار بدم . خوشحال میشم موافقت کنید .
    با تشکر
    https://www.facebook.com/groups/tarrahieweb/




    • مسعود درویشیان
      ۱۱ فروردین ۱۳۹۴

      سلام، ممنون از لطف‌‌‌تون. با ذکر منبع مشکلی نداره می‌تونید هرجا که می‌خواهید منتشر کنید.




  20. رکسانا ایران‌منش
    ۴ شهریور ۱۳۹۵

    مرررررررررررررسی بابت آموزش‌های عالیـــــــــــــــــــتون




  21. امیرمهدی
    ۱۹ مرداد ۱۳۹۶

    سلام ببخشید من درست مفهوم کلاس رو فک کنم درست متوجه نشدم مگه کلاس رو خود نویسندگان اون زبان ننوشتن یا کلاس هایه دیگه ای هم هست میشه لطفا جواب رو به ایمیل بنده ارسال کنید چون من سرم خیلی شلوغه شاید نتونم به این سایت دوباره سر بزنم



دیدگاه خود را بنویسید





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

کامنت های شما بعد از تأیید توسط نویسنده وبلاگ، منتشر خواهند شد.

لطفا دیدگاهتان تا حد امکان مربوط به پست بالا باشد. اگر حرف دیگری دارید و یا قصد تماس با من را دارید، از فرم تماس استفاده کنید.

شما میتوانید با مراجعه به سایت گراواتار یک آواتار اختصاصی برای خود تعریف کنید، تا در کنار نام شما نمایش داده شود

برای قرار دادن کدهای نمونه می توانید از تگ های [php] ، [html] ، [css] و [js] استفاده کنید.
به عنوان مثال کدهای php را می توان به صورت زیر قرار داد:
[php] var $whoLoveIranians = "WebTarget!"; [/php]



کلیه حقوق مادی و معنوی برای وب سایت وب تارگت محفوظ است ©2017 وب‌تارگت

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