🛡 نجات از NullReferenceException: جادوی اپراتورهای مدرن #C 🪄
تو پستهای قبلی در مورد null و خطای معروفش 😭 حرف زدیم. حالا وقتشه با سه تا از قویترین اسلحههای #C ⚔️ برای مقابله با این خطا و نوشتن کدهای امنتر و خواناتر آشنا بشیم: ?.، ?? و ??=.
این سه اپراتور، جعبه ابزار مدرن شما برای نوشتن کدهای ضد-null هستن.
1️⃣ اپراتور Null-Conditional (?.): امنترین راه دسترسی
این اپراتور که بهش "الویس" هم میگن، مثل یه نگهبان شخصیه 🕵️♂️. قبل از اینکه به یه عضو یا متد دسترسی پیدا کنه، چک میکنه: "صاحابخونه هست؟ 🤔".
اگه آبجکت null نبود ✅، کارشو انجام میده.
اگه آبجکت null بود ❌، بدون هیچ سر و صدایی 🤫 کل عبارت رو متوقف میکنه و null برمیگردونه.
StringBuilder sb = null;
// به جای اینکه خطا بده، s برابر با null میشه
string s = sb?.ToString();
// این قابلیت زنجیرهای هم هست!
// چون sb نال هست، اصلاً به ToUpper() نمیرسه و خطا نمیده
string upper = sb?.ToString().ToUpper();
تله مهم 🪤: خروجی این عبارت میتونه null باشه، پس باید اون رو در نوعی بریزید که null رو قبول میکنه (مثلاً int خالی نمیتونه، ولی int? میتونه).
2️⃣ اپراتور Null-Coalescing (??): تعیین مقدار پیشفرض
این اپراتور، زوج عالی برای ?. هست. منطقش اینه:
"اگه چیزی که سمت چپم هست، null نبود، همونو بده. اگه null بود، این مقدار پیشفرض رو بده ✨."
این دوتا با هم یه ترکیب طلایی 🏆 میسازن:
StringBuilder sb = null;
// اگه sb نال نبود، ToString() رو برگردون
// اگه نال بود، رشته "Default Value" رو برگردون
string s = sb?.ToString() ?? "Default Value";
Console.WriteLine(s); // خروجی: Default Value
3️⃣ اپراتور Null-Coalescing Assignment (??=)
مقداردهی هوشمند این اپراتور که از 8 #C اضافه شده، یه میانبر خیلی تمیزه. منطقش اینه:
"فقط و فقط اگه متغیر سمت چپم null هست، این مقدار جدید رو بهش اختصاص بده ✍️."
myVariable ??= someDefaultValue;
دقیقاً معادل این کد طولانیتره:
if (myVariable == null)
{
myVariable = someDefaultValue;
}
🤔 حرف حساب و تجربه شما
این سه اپراتور، جعبه ابزار مدرن شما برای نوشتن کدهای #C تمیز، کوتاه و مقاوم در برابر خطای null هستن.
شما از کدوم یکی از این اپراتورها بیشتر استفاده میکنید؟ آیا ترکیب ?. و ?? جزو ترفندهای روزمره شما هست؟
خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامهی بحث، سوالات، غر زدنها و گپ و گفتهای خودمونی، فقط تو گروه.
[پاتوق گیک های #C]
🔖 هشتگها:
#CSharp #Programming #Developer #DotNet #NullHandling #CodingTips #BestPractices