135. params keyword

בהמשך לטיפ היומי של אתמול ובאופן שלא כל כך מתקשר לשאר הטיפים של השבוע,

לפעמים אנחנו מעוניינים לאפשר למשתמש להעביר מספר פרמטרים כאוות נפשו לפונקציה.

קיימת תמיכה לזה בשפת C#, באמצעות הKeyword params, אותו ניתן להצמיד לפרמטר האחרון בפונקציה, בתנאי שהוא מסוג מערך.

לדוגמה, נניח שאנחנו מעוניינים לכתוב פונקציה שמחשבת סכום של מספר מספרים שלמים.

נוכל לעשות משהו כזה:

1
2
3
4
5
6
7
8
9
10
11
public static int Sum(params int[] numbers)
{
int sum = 0;
foreach (int number in numbers)
{
sum += number;
}
return sum;
}

ולקרוא לה כך:

1
2
3
int sumOfFourNumbers = Sum(1, 2, 4, 8); // 15
int sumOfFiveNumbers = Sum(1, 2, 4, 8, 16); // 31
int sumOfTheNumbers = Sum(4, 8, 15, 16, 23, 42); // 108

שימו לב שאנחנו יכולים לציין כמה פרמטרים שאנחנו רוצים.

קיימת אפשרות גם להעביר פשוט מערך, אם מישהו מעדיף את הקוד הזה, או לחלופין יש לו מערך שהוא רוצה להעביר:

1
2
int[] numbers = new int[] { 4, 8, 15, 16, 23, 42 };
int sumOfTheNumbers = Sum(numbers); // 108

מגבלות: לא נוכל לשלוח פרמטרים בparams בתור ref או out.

בנוסף, הפרמטר של הparams חייב להיות האחרון בפרמטרים. (אתם מסוגלים לחשוב מדוע?)

מבחינת overloading, יש לפונקציה עם params עדיפות נמוכה יותר בזמן קימפול ממתודה עם אותו שם ומספר הפרמטרים שציינו:

כלומר אם נניח נוסיף את הפונקציה הזאת

1
2
3
4
public static int Sum(int x, int y, int z)
{
return 0;
}

אזי הקריאה הבאה:

1
int weirdSum = Sum(1, 2, 3); // 0

מחזירה 0.

params יכול להפוך API למאוד נוח, במיוחד כoverload לפונקציות שמצפות לקבל מערך או IEnumerable<T> כלשהו.

סופ"ש באורך לא מוגבל

שתף