TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #86 80
🤔 تله‌ی else سرگردان در #C:
چرا براکت {} بهترین دوست شماست؟

به این قطعه کد نگاه کنید. به نظرتون else برای کدوم if اجرا میشه؟ اولی یا دومی؟
if (true)
if (false)
Console.WriteLine("Line 1");
else
Console.WriteLine("Line 2"); // این خط اجرا میشه! اما چرا؟


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

1️⃣ قانون else سرگردان (The Dangling Else Rule)

قانون #C (و خیلی از زبان‌های دیگه) اینه: یک else همیشه به نزدیک‌ترین if قبلی در همان بلوک کد که هنوز else نداره، متصل میشه.

پس کامپایلر، کد بالا رو در واقع اینجوری می‌بینه و تفسیر می‌کنه:
if (true)
{
// else به این if متصل شده
if (false)
Console.WriteLine("Line 1");
else
Console.WriteLine("Line 2");
}


چون شرط if اول true هست، وارد بلوک داخلی میشیم. چون شرط if دوم false هست، else مربوط به همون if دوم اجرا میشه.

2️⃣ راه حل: قدرت براکت‌ها {} 🛡

بهترین راه برای جلوگیری از این ابهام و نوشتن کد خوانا و بدون باگ، اینه که همیشه از براکت {} برای بدنه‌ی if و else استفاده کنید، حتی اگه فقط یک خط کد دارید!

با براکت، شما صراحتاً و بدون هیچ ابهامی به کامپایلر (و بقیه توسعه‌دهنده‌ها) میگید که منظورتون چیه.

حالا ببینید با جابجا کردن براکت، چطور منطق کد کاملاً عوض میشه:
if (true)
{
if (false)
Console.WriteLine("Line 1");
}
else // حالا این else مال if اولی است!
{
Console.WriteLine("Line 2"); // و دیگر اجرا نمی‌شود.
}


3️⃣ تنها استثنای زیبا: الگوی else if ✨

تنها جایی که ننوشتن براکت‌های اضافی کاملاً رایج و خواناست، الگوی معروف else if هست. با اینکه از نظر فنی این هم یه if تودرتوئه، ولی #C و IDEها این الگو رو به خوبی می‌شناسن و فرمت می‌کنن.
void TellMeWhatICanDo(int age)
{
if (age >= 35)
Console.WriteLine("You can be president!");
else if (age >= 21)
Console.WriteLine("You can drink!");
else if (age >= 18)
Console.WriteLine("You can vote!");
else
Console.WriteLine("You can wait!");
}


🤔حرف حساب و تجربه شما

نوشتن براکت‌های اضافی یه عادت ساده‌ست که شما رو از ساعت‌ها دیباگ کردن در آینده نجات میده.
شما جزو کدوم دسته‌اید؟ اونایی که همیشه از براکت استفاده می‌کنن یا اونایی که برای کدهای تک‌خطی حذفش می‌کنن؟ آیا تا حالا به خاطر همین موضوع به باگ خوردید؟

خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامه‌ی بحث، سوالات، غر زدن‌ها و گپ و گفت‌های خودمونی، فقط تو گروه.

[C# Geeks Hangout]

🔖 هشتگ‌ها:
#CSharp #Programming #Developer #DotNet #CleanCode #IfElse #BestPractices
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →