|
تاریخ انتشار:۱۰:۰ ۱۳۹۸/۷/۲۷
آموزش #C - جلسه هفتم
آشنایی کامل با دستور if، if های تو در تو و if های نردبانی
در قسمت قبل بحث در مورد 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 = "ArianTopLearn if (fullname == "Bill Gates") } ; Console.WriteLine("C# is pretty cool") { else if (fullname == "James Gosling") } ;Console.WriteLine("Java is pretty cool") { else } ;Console.WriteLine("ArianTopLean.ir is pretty cool!") { end if-else-if structure// { {
خروجی:
!ArianTopLearn.ir is pretty cool
همانطور که میبینید، آرین تاپ لرن انتخاب شد زیرا Bill Gates و James Gosling شرایط لازم را نداشتند!
در قسمت بعد با دستور switch و حلقهی for آشنا خواهیم شد.
منبع:webtarget
|
|
|