چرا براکت {} بهترین دوست شماست؟
به این قطعه کد نگاه کنید. به نظرتون 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