مقادیر برگشتی(return) در تابع ها در سی شارپ

Ratings
(0)

 

ساده ترین راه برای تبادل داده با یک تابع، استفاده از یک مقدار برگشتی یا همان return کردن می باشد. تابع هایی که مقادیری را برمی گردانند(return می کنند) وقتی که از آنها در عبارت ها استفاده کنیم، آن مقدار را به همان روشی که متغیرها مقادیرِ حاوی خود را می سنجند، ارزیابی می کنند. 

مقادیر برگشتی(return) درست مانند متغیرها از یک نوع(type) برخوردار هستند. بعنوان مثال، ممکن است ما یک تابع به نام GetString() داشته باشیم که مقدار برگشتی آن یک رشته(string) است. ما می توانیم در کدها، به صورت زیر از آن استفاده کنیم:

string myString;
myString = GetString();

به طور جایگزین، ممکن است یک تابع به نام GetVal() داشته باشیم که یک مقدار از نوع double را برمی گرداند، که می توانیم از آن در یک عبارت ریاضی استفاده کنیم:

double myVal;
double multiplier = 5.3;
myVal = GetVal() * multiplier;

وقتی که یک تابع، یک مقدار را برمی گرداند، ما باید تابع خود را به دو طریق اصلاح کنیم:

1. به جای استفاده از کلمه ی کلیدی void، نوع مقدار برگشتی در بیانیه ی تابع را مشخص کنید.

2. از کلمه ی کلیدی return در انتهای تابع استفاده کنید و مقدار برگشتی را در کد فراخوانی کننده(ی تابع)، منتقل کنید. 

از نظر کدنویسی، این موضوع شبیه به کد زیر در یک تابع از یک اپلیکیشن کنسول، از نوعی است که در نظر داریم:

static <returnType> <FunctionName>()
{
  ...
  return <returnValue>;
}

تنها محدودیتی که اینجا وجود دارد این است که <returnValue> باید یک مقداری باشد که یا از نوع <returnType> باشد یا به طور ضمنی(implicitly) بتواند به آن نوع تبدیل شود. اما <returnType> می تواند هر نوعی که می خواهیم باشد، که می تواند شامل پیچیده ترین نوع هایی(types) باشد که(تاکنون) مشاهده کرده ایم. این روش می تواند به سادگی کد زیر باشد:

static double GetVal()
{
return 3.2;
}

اما، مقادیر برگشتی معمولاً نتیجه‌ی برخی پردازش‌های انجام شده توسط تابع ها هستند. نتیجه ی کد بالا را می توانیم به سادگی با استفاده از یک متغیر const به دست بیاوریم. وقتی که به دستور return می رسیم، اجرای برنامه بلافاصله به کدی که تابع را فراخوانی کرده است برمی گردد. پس از دستور return در تابع، هیچ کدی پس از آن (در تابع) اجرا نمی شود؛ اما این به این معنی نیست که دستورات return تنها می توانند در آخرین خط از بدنه ی یک تابع قرار گیرند. 

ما می توانیم از دستور return در کدها، اتفاقاً پس از انجام برخی منطق های شاخه بندی(branching logic) استفاده کنیم. قرار دادن دستور return در یک حلقه ی for، یا یک بلوک if یا هر ساختار دیگری، باعث می شود این ساختار بلافاصله خاتمه یابد و تابع مورد نظر به پایان برسد:

static double GetVal()
{
    double checkVal;
    // checkVal assigned a value through some logic (not shown here).
    if (checkVal < 5)
        return 4.7;
    return 3.2;
}

در کد بالا، بسته به مقدار checkVal ،یکی از دو مقدار، برگردانده می شود. تنها محدودیت در این مورد، این است که یک دستور return باید قبل از رسیدن به آکولاد بسته ی { در تابع، پردازش شود. اما روش زیر غیرقانونی است:

static double GetVal()
{
    double checkVal;
    // checkVal assigned a value through some logic.
    if (checkVal < 5)
        return 4.7;
}

زیرا اگر  checkVal is >= 5 باشد، دیگر به هیچ دستور return ای برخورد نمی کنیم؛ و این مجاز نیست. زیرا تمام مسیرهای پردازش(processing paths) باید به یک دستور return برخورد کنند. در بیشتر موارد، کامپایلر این را تشخیص می دهد و خطای not all code paths return a value را به ما تحویل می دهد. 

تابع هایی که یک خط کد را اجرا می کنند، می توانند از یک ویژگی در سی شارپ، به نام متدهای عبارت بدنه دار(expression bodied) استفاده کنند. الگوی به کار برده شده در تابع زیر، از یک => (فلش لامبدا) برای پیاده سازی این ویژگی استفاده می کند:

static <returnType> <FunctionName>() => <myVal1 * myVal2>;

بعنوان مثال، یک تابع Multiply() که قبل از سی شارپ 6 نوشته شده است، و به صورت زیر است:

static double Multiply(double myVal1, double myVal2)
{
  return myVal1 * myVal2;
}

اکنون می تواند با استفاده از => (فلش لامبدا) نوشته شود. نتیجه ی کدی که در بالا نوشته شده است، تورفتگی این متد را به شکلی بسیار ساده تر و به صورت ادغام شده بیان می کند:

static double Multiply(double myVal1, double myVal2) => mVal1 * MyVal2;

 

  • بازدید: 76

نوشتن دیدگاه

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

ارسال