🧠 مغز تصمیمگیری در #C: راهنمay کامل دستور if-else
چطور به برنامهمون یاد بدیم که فکر کنه، شرایط رو بسنجه و تصمیم بگیره؟ ابزار اصلی و روزمره ما برای این کار، دستور قدرتمند و حیاتی if هست. بیاید با تمام جزئیاتش آشنا بشیم.
1️⃣ دستور if: اگر این شرط درست بود...
سادهترین حالت. یه شرط (که باید حاصلش true یا false باشه) رو داخل پرانتز بررسی میکنه. اگه شرط true بود، بلوک کد داخلش اجرا میشه. اگه false بود، کلاً ازش رد میشه.
if (5 < 2 * 3) // شرط 5 < 6 درست است (true)
{
Console.WriteLine("شرط درست بود و این پیام چاپ شد.");
}
2️⃣ دستور else: در غیر این صورت...
else همیشه به یه if وصله و میگه: "اگه شرط if بالایی false بود، به جای اون، این بلوک کد رو اجرا کن."
if (2 + 2 == 5) // شرط غلط است (false)
{
// این بخش اجرا نمیشه
Console.WriteLine("Does not compute");
}
else
{
// چون شرط بالا غلط بود، این بخش اجرا میشه
Console.WriteLine("شرط غلط بود و این پیام چاپ شد.");
}
3️⃣ زنجیرهای کردن شرطها با else if
اگه چند تا شرط مختلف رو میخوای پشت سر هم چک کنی، از else if استفاده میکنی. #C شرطها رو به ترتیب چک میکنه و به محض اینکه به اولین شرط true برسه، بلوک مربوط به اون رو اجرا میکنه و از کل ساختار if-else خارج میشه.
int score = 85;
char grade;
if (score >= 90)
{
grade = 'A';
}
else if (score >= 80)
{
// چون 85 >= 80 درست است، این بلوک اجرا میشه و تمام!
// دیگه شرطهای بعدی چک نمیشن.
grade = 'B';
}
else if (score >= 70)
{
grade = 'C';
}
else
{
grade = 'F';
}
Console.WriteLine($"Your grade is: {grade}"); // خروجی: Your grade is: B
🤔 حرف حساب و تجربه شما
این if-else ستون فقرات منطق در اکثر برنامههاست و تسلط بر اون برای نوشتن هر کدی ضروریه.
شما بیشتر برای چه سناریوهایی از if-else if-else های تودرتو استفاده میکنید؟ آیا جایگزین بهتری مثل switch (که بعداً بهش میرسیم) رو ترجیح میدید؟
خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامهی بحث، سوالات، غر زدنها و گپ و گفتهای خودمونی، فقط تو گروه.
[پاتوق گیک های #C]
🔖 هشتگها:
#CSharp #Programming #Developer #DotNet #ControlFlow #IfElse #CodingTips
🔀 دستور switch:
از نوشتن if-else if-elseهای طولانی و تودرتو خسته شدید؟ برای وقتهایی که میخواید یه متغیر رو با چندین مقدار ثابت مقایسه کنید، #C یه راه حل خیلی تمیزتر و خواناتر داره: دستور switch.
ساختارش سادهست: شما یه متغیر رو به switch میدید و بعد با استفاده از case، حالتهای مختلفی که اون متغیر میتونه داشته باشه رو بررسی میکنید.
این switch کلاسیک دو تا ترفند جالب دیگه هم داره:
اگه میخواید برای چند تا case مختلف، یه کد یکسان اجرا بشه، میتونید اونها رو پشت سر هم و بدون break بنویسید:
یه قابلیت کمتر شناخته شده، goto case هست که به شما اجازه میده از یک case به یه case دیگه بپرید:
با اینکه switch در نسخههای جدید #C خیلی قدرتمندتر شده (که تو پست بعدی بهش میپردازیم)، همین نسخه کلاسیکش هم ابزار فوقالعادهای برای تمیزتر کردن منطقهای شرطی شماست.
شما بیشتر از switch استفاده میکنید یا if-else if؟ جایی بوده که switch واقعاً کدتون رو تمیزتر کرده باشه؟
خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامهی بحث، سوالات، غر زدنها و گپ و گفتهای خودمونی، فقط تو گروه.
[پاتوق گیک های #C]
جایگزین تمیز برای if-elseهای تودرتو
از نوشتن if-else if-elseهای طولانی و تودرتو خسته شدید؟ برای وقتهایی که میخواید یه متغیر رو با چندین مقدار ثابت مقایسه کنید، #C یه راه حل خیلی تمیزتر و خواناتر داره: دستور switch.
1️⃣ ساختار اصلی switch
ساختارش سادهست: شما یه متغیر رو به switch میدید و بعد با استفاده از case، حالتهای مختلفی که اون متغیر میتونه داشته باشه رو بررسی میکنید.
ساختار case: مقدار ثابتی که میخوای بررسی کنی.
ساختار break: مهمترین بخش! بعد از اینکه کد یه case اجرا شد، break باعث میشه که از کل بلوک switch خارج بشیم. اگه break رو نذارید، کدتون خطا میده!
ساختار default: اگه هیچکدوم از caseها با مقدار متغیر نخوندن، این بلوک اجرا میشه. مثل else نهایی عمل میکنه.
void ShowCard(int cardNumber)
{
switch (cardNumber)
{
case 13:
Console.WriteLine("King");
break;
case 12:
Console.WriteLine("Queen");
break;
case 11:
Console.WriteLine("Jack");
break;
default: // برای بقیه اعداد
Console.WriteLine(cardNumber);
break;
}
}
2️⃣ تکنیکهای پیشرفتهتر switch کلاسیک
این switch کلاسیک دو تا ترفند جالب دیگه هم داره:
🧱 روی هم چیدن caseها:
اگه میخواید برای چند تا case مختلف، یه کد یکسان اجرا بشه، میتونید اونها رو پشت سر هم و بدون break بنویسید:
switch (cardNumber)
{
case 13:
case 12:
case 11:
Console.WriteLine("Face card");
break;
default:
Console.WriteLine("Plain card");
break;
}
⬆️پرش با goto case:
یه قابلیت کمتر شناخته شده، goto case هست که به شما اجازه میده از یک case به یه case دیگه بپرید:
switch (cardNumber)
{
case 12:
Console.WriteLine("Queen");
break;
case -1: // جوکر
goto case 12; // جوکر مثل بیبی حساب میشه!
// ... بقیه case ها
}
🤔 حرف حساب و تجربه شما
با اینکه switch در نسخههای جدید #C خیلی قدرتمندتر شده (که تو پست بعدی بهش میپردازیم)، همین نسخه کلاسیکش هم ابزار فوقالعادهای برای تمیزتر کردن منطقهای شرطی شماست.
شما بیشتر از switch استفاده میکنید یا if-else if؟ جایی بوده که switch واقعاً کدتون رو تمیزتر کرده باشه؟
خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامهی بحث، سوالات، غر زدنها و گپ و گفتهای خودمونی، فقط تو گروه.
[پاتوق گیک های #C]
🔖 هشتگها:
#CSharp #Programming #Developer #DotNet #ControlFlow #SwitchCase #CleanCode
🔄 تکرار کد بدون تکرار! راهنمای کامل حلقهها (Loops) در #C
چطور میتونیم یه کار رو صد بار انجام بدیم، بدون اینکه صد خط کد بنویسیم؟ با استفاده از حلقهها (Loops)! حلقهها ستون فقرات هر الگوریتم پیچیدهای هستن و به ما اجازه میدن یک بلوک کد رو بارها و بارها تکرار کنیم.
امروز با ۴ نوع اصلی حلقه در #C آشنا میشیم.
1️⃣ حلقه while: تا وقتی که... ⏳
این سادهترین نوع حلقهست. یه شرط bool رو بررسی میکنه و تا وقتی اون شرط true باشه، بلوک کد رو تکرار میکنه.
نکته کلیدی: شرط قبل از هر بار اجرای بدنه حلقه چک میشه. پس اگه شرط از اول false باشه، بدنه حلقه هیچوقت اجرا نمیشه.
int i = 0;
while (i < 3)
{
Console.Write(i); // 012
i++;
}
2️⃣ حلقه do-while: حداقل یک بار اجرا کن!
این حلقه خیلی شبیه while هست، با این تفاوت مهم که شرط رو بعد از اجرای بلوک کد چک میکنه.
نتیجه مهم: این یعنی تضمین میشه که بدنه حلقه حداقل یک بار اجرا بشه، حتی اگه شرط از اول false باشه.
int i = 0;
do
{
Console.Write(i); // 012
i++;
}
while (i < 3);
3️⃣ حلقه for: حلقه همهکاره و قدرتمند 🔢
این حلقه برای تکرارهایی که تعدادشون مشخصه، عالیه. سه بخش اصلی و قدرتمند داره:
for (بخش مقداردهی اولیه; بخش شرط; بخش گام تکرار)
مقداردهی اولیه: فقط یک بار، قبل از شروع حلقه اجرا میشه (معمولاً برای تعریف شمارنده).
شرط: قبل از هر بار تکرار، این شرط bool چک میشه.
گام تکرار: بعد از هر بار اجرای بدنه حلقه، این بخش اجرا میشه (معمولاً برای افزایش شمارنده).
for (int i = 0; i < 3; i++)
{
Console.Write(i); // 012
}
مثال پیشرفته (دنباله فیبوناچی):
// محاسبه ۱۰ عدد اول دنباله فیبوناچی
for (int i = 0, prevFib = 1, curFib = 1; i < 10; i++)
{
Console.WriteLine(prevFib);
int newFib = prevFib + curFib;
prevFib = curFib;
curFib = newFib;
}
نکته حرفهای: شما میتونید هر کدوم از سه بخش for رو خالی بذارید. مثلاً for (;;) یه حلقه بینهایته!
4️⃣ حلقه foreach: پیمایش کلکسیونها به سبک مدرن ✨
این مدرنترین، خواناترین و امنترین راه برای حرکت روی تمام اعضای یک مجموعه قابل پیمایش (مثل آرایه یا string) هست. دیگه نگران ایندکس و خطای IndexOutOfRangeException نیستید!
// پیمایش روی تمام کاراکترهای رشته "beer"
foreach (char c in "beer")
{
Console.WriteLine(c);
}
// خروجی:
// b
// e
// e
// r
🤔 حرف حساب و تجربه شما
هر کدوم از این حلقهها ابزار مناسبی برای یه کار خاص هستن. انتخاب درست بینشون، کد شما رو تمیزتر و بهینهتر میکنه.
شما تو کدهاتون بیشتر از کدوم نوع حلقه استفاده میکنید؟ for یا foreach؟ سناریوی جالبی دارید که توش do-while بهترین انتخاب بوده باشه؟
خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامهی بحث، سوالات، غر زدنها و گپ و گفتهای خودمونی، فقط تو گروه.
[C# Geeks Hangout]
🔖 هشتگها:
#CSharp #Programming #Developer #DotNet #ControlFlow #Loops #ForEach #ForLoop
🚀 پرشهای حرفهای در #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