قدرت Named Arguments در #C
تا حالا شده یه متد با چند تا ورودی از یک نوع (مثلاً چند تا int یا bool) داشته باشید و موقع صدا زدنش، جای دو تا آرگومان رو با هم اشتباه بگیرید؟ یا ندونید هر مقدار مال کدوم پارامتره؟
😎سیشارپ با قابلیت آرگومانهای نامدار (Named Arguments) این مشکل رو برای همیشه حل کرده و خوانایی کد شما رو به شدت بالا میبره.
1️⃣آرگومان نامدار چیست؟
خیلی سادهست! به جای اینکه به ترتیب، فقط مقدارها رو به متد پاس بدید، میتونید اسم پارامتر رو بنویسید، بعد دو نقطه (:) و بعد مقدارش رو.
void Foo(int x, int y)
{
Console.WriteLine($"x: {x}, y: {y}");
}
// صدا زدن متد با آرگومانهای نامدار
Foo(x: 1, y: 2); // خروجی: x: 1, y: 2
2️⃣قدرت اصلی: بینیازی از ترتیب!
زیبایی این قابلیت اینه که وقتی از اسم پارامترها استفاده میکنید، دیگه ترتیب مهم نیست! میتونید اونها رو به هر ترتیبی که دوست دارید به متد پاس بدید. این کار، کد رو خیلی خواناتر میکنه.
// این دو خط کد دقیقاً یک کار یکسان رو انجام میدن
Foo(x: 1, y: 2);
Foo(y: 2, x: 1);
3️⃣ترکیب با آرگومانهای معمولی(Positional) ⚠️
شما میتونید آرگومانهای معمولی (بدون نام) و نامدار رو با هم ترکیب کنید، اما یه قانون مهم داره: آرگومانهای معمولی باید همیشه قبل از آرگومانهای نامدار بیان.
// ✅ درسته: اول معمولی، بعد نامدار
Foo(1, y: 2);
// ❌ خطای کامپایل: نمیتونی بعد از نامدار، معمولی بیاری
// Foo(x: 1, 2); // این کار معمولاً توصیه نمیشه، هرچند اگه آرگومان در جایگاه درستش باشه، کامپایلر قبول میکنه
4️⃣بهترین کاربرد: پارامترهای اختیاری
قدرت واقعی آرگومانهای نامدار، وقتی مشخص میشه که با پارامترهای اختیاری ترکیب بشن.
فرض کنید متدی با چندین پارامتر اختیاری دارید و فقط میخواید مقدار آخری رو تغییر بدید. بدون آرگومان نامدار، باید برای تمام پارامترهای قبلی هم مقدار پیشفرضشون رو دوباره بنویسید! اما با این قابلیت، کار خیلی ساده میشه:
void Bar(int a = 0, int b = 0, int c = 0, int d = 0)
{
Console.WriteLine($"a:{a}, b:{b}, c:{c}, d:{d}");
}
// فقط پارامتر d رو مقداردهی میکنیم و بقیه پیشفرض باقی میمونن
Bar(d: 3); // خروجی: a:0, b:0, c:0, d:3
🤔 حرف حساب و تجربه شما
آرگومانهای نامدار ابزار فوقالعادهای برای افزایش خوانایی و کاهش باگهای ناشی از ترتیب اشتباه پارامترها هستن، به خصوص در متدهایی با تعداد ورودی زیاد.
شما بیشتر کجا از Named Arguments استفاده میکنید؟ آیا این قابلیت به تمیزتر شدن کدهاتون کمک کرده؟
خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامهی بحث، سوالات، غر زدنها و گپ و گفتهای خودمونی، فقط تو گروه.
[پاتوق گیک های #C]
🔖 هشتگها:
#CSharp
#DotNet
#CleanCode