آموزش پارامترهای out در سی شارپ

Ratings
(0)

علاوه بر  پاس دادن مقادیر با مرجع، ما می توانیم با استفاده از کلمه ی کلیدی out مشخص کنیم که یک پارامتر داده شده، از نوع out باشد که از آن مانند کلمه ی کلیدی ref استفاده می شود(بعنوان یک اصلاحگر در پارامتر در تعریف تابع و در فراخوانی تابع استفاده می شود). 

در عمل، کلمه ی کلیدی out تقریباً مانند یک پارامتر مرجع رفتار می کند. که در آن، مقدار پارامتر در انتهای اجرای تابع، در متغیری که در فراخوانی تابع استفاده شده است، برگردانده می شود. اما بین کلمه ی کلیدی out و ref تفاوت های مهمی وجود دارد:

  • در حالی که استفاده از یک متغیر مقدار دهی نشده، بعنوان یک پارامتر ref غیرقانونی است. اما ما می توانیم از یک متغیر مقدار دهی نشده، بعنوان یک پارامتر out استفاده کنیم. 
  • یک پارامتر out باید توسط تابعی که از آن استفاده می کند، به صورت یک متغیر که مقداردهی نشده، تلقی شود. 

 این یعنی اینکه هنگامی که مجازیم کدها را برای استفاده از یک متغیر مقداردهی شده بعنوان یک پارامتر out فراخوانی کنیم، وقتی که تابع اجرا می شود، مقدار ذخیره شده در این متغیر از بین می رود. بعنوان مثال، می خواهیم تابع MaxValue() که قبلاً با آن کار کرده ایم را توسعه دهیم. این تابع مقدار ماکزیمم را در یک آرایه برمی گرداند. 

کمی این تابع را اصلاح می کنیم تا اندیس عنصر با مقدار ماکزیمم، در داخل آرایه، به دست آید. برای اینکه کار ساده شود، وقتی که چند عنصر وجود دارد که مقادیر ماکزیمم دارند، تنها اندیس اولین رخداد را به دست می آوریم. برای انجام این کار، یک پارامتر out را با اصلاح تابع به صورت زیر، اضافه می کنیم:

static int MaxValue(int[] intArray, out int maxIndex)
{
  int maxVal = intArray[0];
  maxIndex = 0;
  for (int i = 1; i < intArray.Length; i++)
  {
     if (intArray[i] > maxVal)
     {
        maxVal = intArray[i];
        maxIndex = i;
     }
  }
  return maxVal;
}

 از تابع باید به صورت زیر استفاده کنیم:

int[] myArray = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 };
WriteLine("The maximum value in myArray is " +
$"{MaxValue(myArray, out int maxIndex)}");
WriteLine("The first occurrence of this value is " +
$" at element {maxIndex + 1}");

 نتیجه به صورت زیر خواهد بود:

The maximum value in myArray is 9
The first occurrence of this value is at element 7

 ما باید درست مانند کلمه ی کلیدی ref از کلمه ی کلیدی out در فراخوانی تابع مورد نظر استفاده کنیم. یک موقعیت بسیار مفید برای کلمه ی کلیدی out وقتی است که داده ها را تجزیه می کنیم، بعنوان مثال مانند زیر:

if (!int.TryParse(input, out int result)){
  return null;
}
return result;

این کد بررسی می کند که آیا مقدار ذخیره شده در متغیر input  یک int است یا نه. اگر از نوع int نباشد، آنگاه این قطعه کد، مقدار null را برمی گرداند. اما اگر از نوع int باشد، آنگاه این عدد صحیح(integer) را ازطریق متغیر out که بعنوان result برای تابع مورد فراخوانی، تعریف شده است، برمی گرداند. 

 

  • بازدید: 55

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.

ارسال