راهنمای کامل params و پارامترهای اختیاری
نوشتن متدهایی که استفاده ازشون راحت و انعطافپذیر باشه، یکی از ویژگیهای کدنویسی حرفهایه. #C دو تا ابزار قدرتمند برای این کار در اختیار ما میذاره که به ما اجازه میده متدهایی با ورودیهای متغیر یا پیشفرض طراحی کنیم.
بیاید با تمام جزئیات، این دو قابلیت کلیدی رو کالبدشکافی کنیم.
1️⃣params: پذیرش تعداد نامشخص آرگومان
کلمه کلیدی params به شما اجازه میده یه متد بنویسید که بتونه هر تعدادی آرگومان از یک نوع خاص رو به عنوان ورودی قبول کنه. این قابلیت برای متدهای کاربردی مثل توابع محاسباتی یا لاگرها فوقالعادهست.
جادوی پشت صحنه: کامپایلر #C به صورت خودکار، تمام آرگومانهای ورودی شما رو که با کاما جدا شدن، میگیره و اونها رو تبدیل به یه آرایه میکنه و به متد شما تحویل میده.
✨️قوانین کلیدی params:
قانون 1️⃣: params فقط و فقط میتونه برای آخرین پارامتر یک متد استفاده بشه.
قانون 2️⃣: نوع اون پارامتر باید یک آرایه یکبعدی باشه.
// با params، این متد هر تعداد int رو قبول میکنه
int Sum(params int[] numbers)
{
int total = 0;
// numbers در اینجا یک آرایه معمولی است
for (int i = 0; i < numbers.Length; i++)
{
total += numbers[i];
}
return total;
}
// --- نحوه استفاده ---
// شما میتونید هر تعداد آرگومان که خواستید، با کاما جدا کنید
int total1 = Sum(1, 2, 3, 4); // خروجی: 10
// یا حتی خودتون یه آرایه بهش پاس بدید
int[] myNumbers = { 10, 20, 30 };
int total2 = Sum(myNumbers); // خروجی: 60
2️⃣پارامترهای اختیاری: تعیین مقادیر پیشفرض
این قابلیت به شما اجازه میده برای پارامترهای متدتون، یک مقدار پیشفرض تعریف کنید. اگه کاربر موقع صدا زدن متد، مقداری برای اون پارامتر نفرسته، از همون مقدار پیشفرض استفاده میشه.
void RegisterUser(string username, string country = "Iran")
{
Console.WriteLine($"User: {username}, Country: {country}");
}
// --- نحوه استفاده ---
RegisterUser("Ali", "Germany"); // User: Ali, Country: Germany
RegisterUser("Sara"); // User: Sara, Country: Iran
نکات فنی و قوانین مهم:
تله کامپایلر! مقدار پیشفرض در محل صدا زدن متد (calling side) قرار میگیره، نه در خود متد. یعنی RegisterUser("Sara") بعد از کامپایل، به RegisterUser("Sara", "Iran") تبدیل میشه.
نتیجه مهم:
●اگه شما یه کتابخونه بسازید و بعداً مقدار پیشفرض رو توش عوض کنید، پروژههایی که از اون کتابخونه استفاده میکنن تا وقتی که دوباره کامپایل نشن، از همون مقدار پیشفرض قدیمی استفاده خواهند کرد!
●مقدار پیشفرض باید یک عبارت ثابت در زمان کامپایل باشه (مثل یک عدد، رشته، null یا default).
●پارامترهای اختیاری نمیتونن ref یا out باشن.
●در تعریف متد، پارامترهای اجباری باید قبل از پارامترهای اختیاری بیان.
🤔 حرف حساب و تجربه شما
این دو قابلیت، ابزارهای شما برای طراحی APIهای تمیز و انعطافپذیر هستن.
از params وقتی استفاده کنید که تعداد ورودیها نامشخصه.
از پارامترهای اختیاری وقتی استفاده کنید که یه پارامتر، یه مقدار پیشفرض رایج داره.
شما از کدوم یکی از این دو قابلیت بیشتر استفاده میکنید؟ آیا تا حالا به تله کامپایلری پارامترهای اختیاری برخورد کرده بودید؟
نظراتتون رو کامنت کنید! 👇
[C# Geeks Hangout]
🔖 هشتگها:
#Parameters
#OptionalParameters
#Params