🚀 پرشهای حرفهای در #C: راهنمای کامل break, continue, return, throw و goto
برنامه همیشه خط به خط اجرا نمیشه. گاهی وقتا لازمه از یه حلقه بپریم بیرون، یه تکرار رو رد کنیم، یا کل متد رو متوقف کنیم. #C برای این "پرش"ها، چند تا دستور کلیدی داره که بهشون میگیم Jump Statements.
بیاید با این ابزارهای قدرتمند برای کنترل جریان اجرا آشنا بشیم.
💡نکته مهم: تمام این دستورات پرش، از قوانین بلوک try...finally پیروی میکنن. یعنی اگه از داخل یه try به بیرون بپرید، بلوک finally همیشه قبل از پرش اجرا میشه.
1️⃣ break: فرار از حلقه!
دستور break مثل یه درِ خروج اضطراری برای حلقهها (for, while, ...) و switch عمل میکنه. به محض اجرا، حلقه یا switch رو فوراً متوقف میکنه و اجرا به اولین خط بعد از اون منتقل میشه.
int i = 0;
while (true) // حلقه بینهایت
{
if (i > 5)
break; // از حلقه فرار کن!
Console.Write(i + " ");
i++;
}
// خروجی: 0 1 2 3 4 5
// اجرا از اینجا ادامه پیدا میکنه
2️⃣ continue: این یکی رو بیخیال شو!
continue مثل دکمه "اسکیپ" برای تکرار فعلی حلقهست. بقیه کدهای داخل حلقه رو برای این تکرار نادیده میگیره و مستقیم میره سراغ شرط و گام تکرار بعدی.
for (int i = 0; i < 10; i++)
{
if ((i % 2) == 0) // اگه عدد زوجه
continue; // این تکرار رو بیخیال شو و برو سراغ i بعدی
Console.Write(i + " ");
}
// خروجی: 1 3 5 7 9
3️⃣ return: ماموریت انجام شد!
return به متد میگه "کار من اینجا تموم شد!" و اجرا رو به جایی که متد صدا زده شده بود، برمیگردونه. اگه متد خروجی داشته باشه (non-void)، return باید اون مقدار رو هم با خودش برگردونه.
decimal AsPercentage(decimal d)
{
decimal p = d * 100m;
return p; // با مقدار p به بیرون از متد برگرد
}
4️⃣ throw: اعلام وضعیت قرمز!
این throw برای پرتاب کردن یه Exception و اعلام وضعیت خطاست. وقتی یه throw اجرا میشه، اجرای عادی متوقف میشه و #C دنبال یه بلوک catch برای مدیریت اون خطا میگرده (که بعداً مفصل بهش میرسیم).
if (string.IsNullOrWhiteSpace(name))
{
throw new ArgumentNullException("Name cannot be null or empty!");
}
5️⃣ goto: شمشیر دولبه (و خطرناک!)
goto قدیمیترین و قدرتمندترین دستور پرشه، ولی استفاده ازش در ۹۹٪ مواقع توصیه نمیشه چون میتونه کد رو به "کد اسپاگتی" تبدیل کنه که دنبال کردنش خیلی سخته. با این حال، دونستنش برای شناخت کامل زبان خوبه. goto اجرا رو به یک لیبل (label) منتقل میکنه.
int i = 1;
startLoop: // این یک لیبل است
if (i <= 5)
{
Console.Write(i + " ");
i++;
goto startLoop; // به لیبل startLoop بپر
}
// خروجی: 1 2 3 4 5
🤔 حرف حساب و تجربه شما
تسلط بر این دستورات پرش، به شما کنترل کاملی روی جریان اجرای برنامهتون میده.
شما از کدوم یکی از این دستورات بیشتر استفاده میکنید؟ آیا تا حالا از goto تو یه سناریوی واقعی استفاده کردید که واقعاً لازم بوده باشه؟
خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامهی بحث، سوالات، غر زدنها و گپ و گفتهای خودمونی، فقط تو گروه.
[پاتوق گیک های #C]
🔖 هشتگها:
#CSharp #Programming #Developer #DotNet #ControlFlow #BestPractices #Exception