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

آموزش سی شارپ – دستورات کنترلی ۲

آموزش سی شارپ - دستورات کنترلی ۲
آموزش سی شارپ - دستورات کنترلی ۲

دستورات کنترلی سی شارپ

در این جلسه به بررسی جامع‌تر دستورات کنترلی خواهیم پرداخت.

 

دستورات کنترلی در سی شارپ

حتما قبل از بررسی دستورات کنترلی ۲ در سی شارپ نوشته‌ی مطالب قبلی این دوره‌ی آموزشی را با هشتگ #دوره آموزشی_سی_شارپ در سایت ما را مطالعه کنید.

 

عملگرهای افزایشی و کاهشی در سی شارپ

فرض کنید شما یک متغیر به‌اسم counter تعریف کردید و می‌خواهید هربار که عملیاتی در برنامه شما انجام شد، به متغیر counter شما یک واحد اضافه شود.

شما قصد دارید که خط‌ کدی را شبیه خط ‌کد زیر اجرا کنید:

counter = counter + 1;

این بدین معنی است که: مقدار counter با عدد ۱ جمع شده و مجدداً در خودش ریخته می‌شود. سی‌شارپ چندین راه میان‌بر برای این منظور دارد.

برای مثال، خط کد زیر دقیقاً همان معنی را می‌دهد:

counter += 1;

عمل‌گر =+ به‌طور هم‌زمان عملیات “اضافه‌کردن و اختصاص‌دادن” را انجام می‌دهد.

این عمل‌گر، عمل‌وند سمت راست را با عمل‌وند سمت چپ جمع می‌کند و نتیجه‌ی آن را به عمل‌وند سمت چپ اختصاص می‌دهد.

علاوه‌بر عملگر =+ عمل‌گرهای =- و =* و =/ نیز وجود دارند.

  • عمل‌گر =- از لحاظ طریقه‌ی عمل‌کرد مشابه =+ است با این تفاوت که به‌جای جمع، عمل تفریق را انجام می‌دهد.
    برای مثال در دستور counter -= 1; مقدار عمل‌وند سمت راست از مقدار عمل‌وند سمت چپ کم می‌شود.
  • عمل‌گر =* به طریقی مشابه عمل “ضرب‌کردن و اختصاص‌دادن” را انجام می‌دهد.
  • عمل‌گر =/ نیز به همین روال عمل می‌کند. برای مثال counter /= 2 معادل با counter = counter / 2 است.

دقت کنید که نباید بین دو علامت این عملگرها فاصله بگذارید. فاصله گذاشتن قبل و بعد از آن‌ها اختیاری است. هنگامی که می‌خواهید دقیقاً ۱ واحد به متغیر خود اضافه کنید می‌توانید از دو عمل‌گر پیش‌وندی و پسوندی برای افزایش مقدار متغیر استفاده کنید. برای استفاده از عمل‌گر افزایشی پیش‌وندی کافی است از دو علامت + قبل از اسم متغیر استفاده کنید.

به‌عنوان مثال :

++someValue; 
someValue ++;

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

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

int b, c;
b = 4;   
c = ++b;// b=5 c=5

b = 4;
c = b++; // b=5 c=4

علاوه‌بر عملگر پیش‌وندی و پس‌وندی افزایشی، می‌توانید از عملگر پیشوندی و پسوندی کاهشی (-‌-) نیز استفاده کنید. این عمل‌گر (-‌-) دقیقاً یک واحد را از متغیر کم می‌کند. (Minus)

 

دستور break در حلقه‌ها

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

به مثال زیر توجه کنید:

for (int i = -10; i <= 10; i++)
{
   if (i > 0) break;
   Console.Write(i + " ");
}

همان‌طور که مشاهده می‌کنید، حلقه طوری طراحی شده که باید از ۱۰- تا ۱۰ را نمایش دهد. ولی با استفاده از کلمه break، حلقه در زمانی که i مثبت می‌شود به پایان می‌رسد.

int x = 0;
while (true)
{
   if (x++ > 5) break; // break from the loop
}

نکته‌ی قابل توجه در این برنامه، حلقه‌ی (while(true است. در این حلقه پیوسته شرط حلقه (condition) برقرار است. (برابر با true است) این حلقه تا بی‌نهایت اجرا می‌شود ولی با توجه به برنامه ما، دستور if درون حلقه مانع از اجرای بی‌نهایت حلقه شده. پس از این‌که ++x بزرگ‌تر از ۵ بود برنامه از حلقه خارج می‌شود.

بنابراین حلقه‌ی بی‌نهایت while این‌گونه است:

while (true)
2
{
3
}

در حلقه‌ی for تمام قسمت‌ها اختیاری هستند و شما می‌توانید با خالی گذاشتن آن قسمت‌ها یک حلقه‌ی بی‌نهایت به‌وجود آورید. (توجه کنید که گذاشتن سمی‌کالن‌ها در حلقه‌ی for اجباری است)

for ( ; ; )
{
}

 

دستور continue در حلقه‌ها

ما می‌توانیم در بدنه‌ی حلقه از کلمه‌کلیدی continue استفاده کنید. با این‌کار حلقه وادار می‌شود عملیات تکرار بعدی را انجام دهد و مابقی کد را نادیده بگیرد.

به این مثال توجه کنید:

for (int i = 0; i <= 10; i++)
{
   if (i % 2 != 0)
      continue;
   Console.Write(i + " ");
}

همان‌طور که می‌بینید این برنامه اعداد زوج ۰ تا ۱۰ نمایش می‌دهد. در این مثال هنگامی‌که i عددی فرد است، برنامه توسط کلمه continue به تکرار بعدی حلقه می‌پردازد و مقدار i را نمایش نمی‌دهد. همان‌طور که در برنامه مشخص است، اگر شرط if درون حلقه برقرار بماند، دستور continue اجرا شده و برنامه به ابتدای حلقه باز می‌گردد. در حلقه‌های while و do-while کلمه‌ی continue موجب می‌شود برنامه مستقیماً به قسمت condition حلقه برود و مجدداً حلقه را اجرا کند.

 

دستور switch در سی شارپ

switch(expression)
{
    case constant1:
        statement sequence
        break;
    case constant2:
        statement sequence
        break;
    case constant3:
        statement sequence
        break;
.
.
.
    default:
        statement sequence
        break;
}

قسمت expression باید یا integer type (مثل int, short, byte, char) یا string type است. غالباً expression، کنترل‌کننده‌ی switch، یک متغیر است. بعد از کلمه‌‌کلیدی case یک مقدار ثابت (constant) قرار می‌گیرد که حتماً باید هم‌نوع expression است. هیچ دو case ای در یک switch نباید constant یکسان بماند. کلمه‌کلیدی break در پایان هر case قرار دارد و برای پایان دادن به ساختار switch استفاده می‌شود. استفاده از کلمه‌کلیدی default اختیاری است. اگر مطابقت با expression در case ها یافت شد، کدهای قسمت همان case تا رسیدن به break اجرا می‌شود. ولی اگر مقدار هیچ caseای با expression مطابقت نداشت، قسمت default اجرا می‌شود. اگر از default استفاده نکردید، هنگامی‌که هیچ تطابقی یافت نشد، هیچ اتفاقی نیز نخواهد افتاد.

 

دستور goto در سی شارپ 

نکته: قبل از توضیح این دستور باید گفت اکثرا این دستور به دلیل ساخت یافته کردن شرایط برنامه استفاده نخواهد شد؛ ضمنا سی شارپ طبق گفته ی قبل زبانی کاملا شیگرا است. goto یک jump statement غیر شرطی است. هنگامی‌که برنامه به این کلمه می‌رسد، به مکان مشخصی از کد که توسط goto مشخص شده است، پرش می‌کند. goto برای انجام عملیات نیاز به یک برچسب دارد. برچسب یکی از شناسه‌های سی‌شارپ است که بعد از آن علامت دونقطه (:) قرار می‌گیرد. برچسب باید در همان بلاک و متدی است که goto قرار دارد.

به‌عنوان مثال، برنامه زیر یک حلقه است که اعداد ۱ تا ۲۰ را توسط goto و برچسب نمایش می‌دهد:

int x = 1;

Loop1: // برچسب
   if (x < 20)
   {
      Console.WriteLine(x);
      x++;
      goto Loop1; // پرش به برچسب
   }
   Console.WriteLine("Done!");

goto هم‌چنین می‌تواند در یک ساختار switch به case و default دل‌خواه پرش کند. در این مورد، case و default نقش label را بازی می‌کنند بنابراین می‌توانند هدف goto قرار گیرند. نکته این‌جاست که goto باید درون switch مربوطه است و شما نمی‌توانید از بیرون به درون یک switch پرش کنید.

به مثال زیر که از goto در ساختار switch استفاده می‌کند توجه کنید:

for (int i = 1; i < 5; i++)
{
   switch (i)
   {
      case 1:
         Console.WriteLine("In case 1");
         goto case 3;
      case 2:
         Console.WriteLine("In case 2");
         goto case 1;
      case 3:
         Console.WriteLine("In case 3");
         goto default;
      default:
         Console.WriteLine("In default");
         break;
   }
   Console.WriteLine();
}

در این مثال ساختار دستور کنترلی switch درون یک حلقه‌ی با تکرار معین for قرار دارد و در هر دور حلقه، مقدار i به ساختار switch داده می‌شود. توجه کنید که در ساختار switch چگونه goto به caseهای مختلف و default پرش می‌کند. نکته‌ی دیگر این‌جاست که caseها با break پایان نیافته‌اند (به‌جز default) چرا که استفاده از break در این‌جا بی‌مورد و بی‌تاثیر است. زیرا هر case توسط goto به case دیگری فرستاده شده و نهایتاً در قسمت default از ساختار switch خارج می‌شود. همان‌طور که گفته شد، نمی‌توانید از بیرون به درون ساختار switch پرش کنید و اگر علامت کامنت را از ابتدای آخرین خط‌ کد برنامه حذف کنید. برنامه کامپایل نمی‌شود. استفاده از goto در ساختار switch در برخی موارد خاص می‌تواند مفید، اما پیشنهاد نمی‌شود.

 

در ارتباط با “دستورات کنترلی سی شارپ” نظرات خود را بنویسید.

برای استفاده از تمامی جلسات از هشتگ #دوره آموزشی_سی_شارپ در سایت ما استفاده کنید.

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

برای امتیاز به این نوشته کلیک کنید!
[کل: 2 میانگین: 3]