در قسمت قبل بحث در مورد Program Control Statements بود و توضیحاتی در مورد این سرفصل و دستور if داده شد. در این قسمت به توضیحات تکمیلیتر این مبحث میپردازیم. همانطور که در قسمت ششم بیان شد، دستور if و if-else یکی از رایجترین راهها برای تصمیم گیری در سی شارپ هستند.
شما دستور if را برای یک تصمیمگیری بهکار میبرید. بهعبارت دیگر، شما از دستور if برای اینکه مشخص کنید یک عمل اتفاق بیفتد یا خیر، استفاده میکنید. همچنین دانستید که در قسمت condition دستور if یک مقدار بولین قرار دارد که اگر true باشد statement اجرا میشود و اگر false باشد statement اجرا نخواهد شد. در بعضی از زبانهای برنامهنویسی مثل ++C اعداد غیر صفر بهعنوان true تلقی میشوند و عدد صفر بیانکنندهی مقدار false است. در سی شارپ تنها عبارتهای بولی و مقایسههایی که مقدار بولین را برمیگردانند برای نشان دادن مقدار true و false استفاده میشوند.
همانطور که در قسمت قبل گفته شد، هنگامیکه چندین statement داشته باشید، باید آنها را در یک بلاک قرار دهید. حتی اگر تنها یک statement هم داشته باشید میتوانید آن را در یک بلاک قرار دهید. قرار دادن یک statement در بلاک، یک تکنیک مفید است که باعث جلوگیری از خطاهای احتمالی در آینده میشود زیرا اگر بخواهید بعداً در یک برنامه تغییراتی را اعمال کنید و برای مثال چندین statement را در یک دستور if اضافه کنید، این احتمال خیلی زیاد است که از براکت باز و بسته غافل شوید.
همچنین میتوانید یک بلوک خالی داشته باشید که هیچ statement ای در آن نیست. اینکار معمولاً زمانیکه یک برنامهنویس شروع به نوشتن یک برنامه میکند و برای اینکه به خودش یادآوری کند بعداً statement را در بلاک قرار دهد، انجام میشود. بعضی از برنامهنویسان ترجیح میدهند براکت باز را برای بلوکها در همان خطی قرار دهند که عبارت if هم قرار دارد (بهجای اینکه براکت باز در یک خط جدا باشد). این سبک بلاکگذاری K&R نام دارد و این نامگذاری به احترام Brian Kernighan و Dennis Ritchie است که مخترعان زبان C هستند و اولین کتاب زبان برنامهنویسی C را نوشتند که در این کتاب بلاکگذاری آنها به این سبک بود.
مثالی به سبک K&R:
static void Main() { int i = 6; if (i < 8) { Console.WriteLine("A sample of K&R style..."); } else { Console.WriteLine("A sample of K&R style..."); } }
(if های تو در تو) Nested ifs
if تودرتو، if ای است که در قسمت statement یک if یا else دیگر قرار دارد.
به نمونهی زیر دقت کنید:
using System; class NestedIf { static void Main() { int i = 6; if (i < 8) { if (i == 6) { Console.WriteLine("This is a nested if."); } } } }
همانطور که میبینید، یک if در درون if دیگری واقع شده است. اگر if اول شامل مقدار true باشد، کامپایلر وارد بلاک آن شده که با if دیگری مواجه میشود. اگر if دوم هم شامل مقدار true باشد، استرینگ مربوطه نمایش داده میشود. در غیر اینصورت هیچ خروجی چاپ نمیشود.
نکته اصلی که در مورد Nested ifs باید بهخاطر بسپارید این است که، عبارت else همیشه مربوط به نزدیکترین if بالای خودش است که هر دو آنها در یک بلاک هستند.
به نمونهی زیر دقت کنید:
if (i == 10) { if (j < 20) a = b; if (k > 100) c = d; else a = c; // this else refers to if(k > 100) } else a = d; // this else refers to if(i == 10)
در مثال بالا، آخرین else مربوط به (if(j < 20 نیست بهدلیل اینکه اینها در یک بلاک یکسان نیستند (هرچند که این نزدیکترین if بدون else است). بلکه آخرین else مربوط به (if(i == 10 است. else داخلی مربوط به (if(k > 100 است زیرا این نزدیکترین if به آن است و هر دوی آنها در یک بلاک هستند.
The if-else-if Ladder
اگر شما به یک مقایسهی پیچیدهتر نیاز داشته باشید، میتوانید چندین شرط را چک کنید. این روش که به روش نردبانی معروف است، یکی از رایجترین روشها در برنامهنویسی است و فرم کلی آن بهشکل زیر است:
if(condition) statement; else if(condition) statement; else if(condition) statement; . . . else statement;
در این مدل، condition ها از بالا به پایین چک میشوند و بهمحض اینکه یک condition با مقدار true پیدا شد، statement مربوط به آن اجرا میشود و بقیهی این ساختار نردبانی نادیده گرفته میشود. اگر هیچیک از condition ها درست نبود، عبارت else پایانی اجرا میشود. else پایانی غالباً بهعنوان condition پیشفرض عمل میکند و هرگاه که همهی condition ها شامل مقدار false باشند، else پایانی اجرا میشود. اگر else پایانی را قرار ندهید و همهی condition ها مقدار false داشته باشند، آنگاه هیچ اتفاقی نمیافتد.
به مثال جالب زیر توجه کنید:
//if−else-if structure using System; class ifElseIfLadder { static void Main() { string fullname = "Webtarget"; if (fullname == "Bill Gates") { Console.WriteLine("C# is pretty cool"); } else if (fullname == "James Gosling") { Console.WriteLine("Java is pretty cool"); } else { Console.WriteLine("Webtarget.Ir is pretty cool!"); } //end if-else-if structure } }
خروجی:
Webtarget.ir is pretty cool!
همانطور که میبینید، وبتارگت انتخاب شد زیرا Bill Gates و James Gosling شرایط لازم را نداشتند!
در قسمت بعد با دستور switch و حلقهی for آشنا خواهیم شد.
عـــــ L ــــــی
27 September 2012
سلام آقا مسعود
خدا قوت،دستون درد نکنه انشاالله هرچی از خدا بخوای بهتون بده
مسعود درویشیان
27 September 2012
سلام علی جان
مرسی از لطفت، امیدوارم که این آموزشها براتون مفید باشه و بهره کافی رو ببرید.
داوود
27 September 2012
در اینجا که نوشتید:
” اگر else پایانی را قرار ندهید و همهی condition ها مقدار false داشته باشند، آنگاه هیچ اتفاقی نمیافتد.”
و در اینجا طبق گفته شما:
یعنی اگر ما else آخر را نذاریم ولی عبارتی که منجر به نمایش webtarget.ir می شود را بذاریم، بازهم هیچ اتفاقی نمی افتد؟ یا برنامه خطای نحوی از ما میگیرد؟
مسعود درویشیان
27 September 2012
اگر else پایانی رو قرار ندید و همهی condition ها مقدار false داشته باشند، هیچیک از if و else-if های ساختار نردبانی اجرا نمیشه و در نتیجه کامپایلر به سراغ خطکدهای بعدی شما میره تا بقیهی برنامه رو اجرا کنه.
بهعنوان مثال اگه اینطوری بنویسید:
در نتیجه هیچیک از if و else-if های ساختار نردبانی اجرا نمیشه و کامپایلر به سراغ خطکد بعدی شما (که در اینجا دستور چاپ یه string هست) میره تا بقیهی برنامه رو اجرا کنه.
اگه این برنامه رو اجرا کنی میبینی که هیچ خطایی نمیگیره
اگه بخوای یه شرط برای if داشته باشی که اگر اجرا نشد فقط یه حالت دیگه اتفاق بیفته دیگه لزومی نداره else-if بذاری و فقط از else استفاده میکنی
مجتبی
27 September 2012
ممنون از شما
دوستان من کتاب C# جان شارپ رو خوندم عالیه.
توصیه می کنم. هر تیکه رو گفته چیه. آقای درویشیان شما هم تایید می کنید؟
مسعود درویشیان
27 September 2012
این کتابی که میفرمایید رو مطالعه نکردم.
f.n
30 September 2012
با سلام به خاطر مطلب آموزشی مفیدتون ممنونم امیدوارم بتونیم بهره کافی رو از اطلاعات شما ببریم. یه درخواست کوچیک داشتم اگه یه خورده به مبحث آموزش سرعت بیشتری بدید ممنون می شم چون خیلی سی شارپ گستردست. من خیلی وقت بود منتظر قسمت هفتم بودم .
یه سوالم دارم شما تا چه سطحی این آموزش رو ادامه می دید؟
مسعود درویشیان
2 October 2012
سلام
مقالات آموزشی زنگ سیشارپ طبق استاندارد جهانی، همهی سرفصلهای اصلی رو در بر میگیره و همهی مباحثی که برای یه برنامهنویس سیشارپ ضروری هست رو پوشش میده. این مقالهها هفتهای دو قسمت (یکشنبه و چهارشنبه) پخش میشه که در حال حاضر همین زمانبندی مناسب هست.
موفق باشید
علی حیدرزاده
1 October 2012
دیریست که دلدار پیامی نفرستاد
ننوشت کلامی و سلامی نفرستاد
سمیرا
3 November 2012
ممنون
مثل همیشه عالی بود
خسته نباشید
Praise
10 December 2012
یعنی پوکیدم از اون “مثال جالب” آخرتون ! :))))
مرسی !
علیرضا
24 January 2013
تو اموزش های قبل یاد دادین ک میتونیم ورودی دریافت کنیم !حالا میشه یه مثال مقایسه دو عدد دریافتی بزنید ؟اخه هر کاری کردم درست کنم خطا میداد!!!!؟لطفا کمکم کنید
Aydin
19 June 2013
باقی قسمت ها را مطالعه نکردم که بدونم به جواب رسیدید یا نه اما …
string i ;
string f ;
i = Console.ReadLine();
f = Console.ReadLine();
float res = int.Parse(i) / float.Parse(f);
Console.WriteLine(res);
Console.ReadLine();
ارام
11 April 2015
سلام خسته نباشید.
مرسی از این اموزش مفید…
من تازه شروع به کار کردم من تو این نمونه نمیفهمم که (if -else)چطور عمل می کنن میشه یخورده توضیح بدید؟
Console.WriteLine(“Please Enter three number”);
int n1 = int.Parse(Console.ReadLine());
int n2 = int.Parse(Console.ReadLine());
int n3 = int.Parse(Console.ReadLine());
Console.Write(“min = “);
if (n1 < n2)
if (n1 < n3)
Console.WriteLine(n1);
else if (n2 < n3)
Console.WriteLine(n2);
else Console.WriteLine(n3);
Console.WriteLine();
abbas
25 July 2015
با سلام به اساتید
اگه بخواهیم با 3 تا دکمه رادیویی (radio button) شرط بزاریم که اگر هر کدام فعال بود یک عمل انجام بشه من این کد رو نوشتم ولی جواب نمیده میشه بگید مشکل کجاست:
if (radiobutton1.enable=true)
انجام عملیات اول
if (radiobutton2.enable=true)
انجام عملیات دوم
if (radiobutton3.enable=true)
انجام عملیات سوم
aboy
9 July 2016
باتشکر فراوان از شما یک سوال داشتم
alt+f5رو فشار میدم تا بر نامه اجرا بشه اجرا میکنه ولی بلا فاصله بعد از تموم شدن کارش صفحرو میبنده با این که قبلا یک متن مینوشت تا با زدن یک دکمه ببنده صفحه رو اگه میشه کمک کنید که درستش کنم.
ممنون از سایت خوب تون.
محسین کریمی
10 November 2017
سلام می خام در باره ای کتاب زبان برنامه نویسی پرسم کسی هست بدونه که از همه کتاب برنامه نویسی سی شارپ به درجه ای عالیش نوشته