در حال بارگذاری...

مقدار بازگشتی

یک متد به‌نام twice بنویسید که یک int به‌نام n بگیرد و دو برابر آن عدد را برگرداند. سرصفحه با int شروع می‌شود، نه void: static int twice(int n). داخل آکولاد بنویسید return n * 2;. در Main نتیجهٔ فراخوانی را بنویسید: Console.WriteLine(twice(7));. صفحه باید یک خط نشان دهد: 14. خود twice متد WriteLine را صدا نمی‌زند. فقط 14 را برمی‌گرداند. Main آن عدد را می‌نویسد. همین برگرداندن چیزی است که این صفحه آموزش می‌دهد. نام کلاس عمومی را Pine نگه دارید.

عددی را به Main برگردانید

در صفحهٔ پارامترها، greet و show داخل بدنهٔ متد می‌نوشتند. فراخوانی مقدار را به داخل می‌فرستاد و متد روی صفحه می‌نوشت. اینجا متد هنوز مقدار می‌گیرد، ولی مقداری هم به بیرون می‌فرستد. کلمهٔ return آن مقدار خروجی را علامت می‌زند. Main می‌تواند نگهش دارد یا بنویسدش.
فایل Pine را باز کنید. نام کلاس Pine می‌ماند. این صفحه نوع را عوض نام نمی‌کند. اگر هنوز دموی greet که فقط داخل متد hi lena می‌نویسد همهٔ چیزی است که در Main دارید، پاکش کنید. هر باقی‌ماندهٔ ring(); را پاک کنید. هر خط ReadLine را هم پاک کنید. فایلی که نگه می‌دارید منتظر تایپ نیست.
بیرون از Main، هنوز داخل آکولادهای کلاس، سرصفحه int می‌گوید چون مقداری که برمی‌گردد int است. بین پرانتزها، int n هنوز پارامتر است — همان ایدهٔ صفحهٔ قبل. بدنه یک دستور دارد: return n * 2;. آن n را در 2 ضرب می‌کند و حاصل را به کسی که twice را صدا زده برمی‌گرداند. در این صفحه داخل twice هیچ Console.WriteLine نیست. پیش از اجرا فایل را ذخیره کنید. برنامهٔ کامل اول در جعبهٔ بعدی است.

فایلی که نگه می‌دارید

این برنامهٔ کوچک کامل است. twice حساب می‌کند. Main می‌نویسد.

twice returns n times 2

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Console.WriteLine(twice(7));
    }

    static int twice(int n)
    {
        return n * 2;
    }
}

از بالا بخوانید. using System; نام‌های کوتاه را آماده می‌کند. public class Pine نوع را نام می‌گذارد. public static void Main() جایی است که زمان اجرا شروع می‌کند. فراخوانی twice(7) مقدار 7 را داخل n می‌فرستد. static int twice(int n) مقدار return n * 2; را نگه می‌دارد. Console.WriteLine مقداری را می‌نویسد که برگشته. روی صفحه یک خط: 14.

با dotnet run اجرا کنید. برنامه یک خط می‌نویسد و تمام می‌شود. منتظر نمی‌ماند که شما چیزی تایپ کنید. اگر dotnet run منتظر ماند، هنوز ReadLine داخل فایل است. آن خط را پاک کنید و Console.WriteLine(twice(7)); به‌همراه متد twice بالا را نگه دارید. صفحه 14 را نشان می‌دهد. اگر صفحه hi lena نشان دهد، هنوز فراخوانی باقی‌ماندهٔ greet اجرا می‌شود. اگر صفحه حرف‌های twice را نشان دهد، خط نوشتن دور همان کلمه گیومه دارد: Console.WriteLine("twice");. برای صفحه‌ای که خط اشتباه نشان می‌دهد SDK دات‌نت را دوباره نصب نکنید.

یک اجرای کامل را به ترتیب راه بروید. C# از Main شروع می‌کند. فراخوانی twice(7) مقدار 7 را داخل n می‌فرستد. درون twice، return n * 2; مقدار 14 را حساب می‌کند و آن 14 را به Main برمی‌گرداند. سپس WriteLine مقدار 14 را می‌نویسد. خود twice هرگز روی صفحه ننوشت. اگر فراخوانی را به twice(3) عوض کنید، صفحه باید 6 نشان دهد. بدنهٔ متد همان می‌ماند؛ فقط آرگومان عوض می‌شود و حاصل برگشتی با آن عوض می‌شود. اگر صفحه به‌جای 14 مقدار 7 نشان دهد، داخل twice مقدار n را نوشته‌اید یا در Main آرگومان را بدون صدا زدن twice نوشته‌اید — دو برابر کردن را روی خط return بگذارید و نتیجهٔ فراخوانی را بنویسید.
جداسازی مهم این است که چه کسی با صفحه حرف می‌زند. در این صفحه، twice فقط از راه return با Main حرف می‌زند. Main از راه WriteLine با صفحه حرف می‌زند. برای همین سرصفحه دیگر نمی‌تواند void بگوید: باید چیزی برگردد تا Main بنویسد. وقتی اول نتیجه را در result نگه می‌دارید، هنوز از همان برگرداندن استفاده می‌کنید؛ فقط نوشتن را یک خط عقب می‌اندازید.

مقداری را که Main گرفته بنویسید

می‌توانید مقدار برگشتی را پیش از نوشتن داخل یک نام در Main نگه دارید. اگر می‌خواهید خط صفحه فرق کند فقط عدد داخل فراخوانی را عوض کنید. return n * 2; را دست نزنید.

store the returned value

csharp
using System;

public class Pine
{
    public static void Main()
    {
        int result = twice(7);
        Console.WriteLine(result);
    }

    static int twice(int n)
    {
        return n * 2;
    }
}

این فایل دوم است. همان return را با نام ذخیره‌شده آموزش می‌دهد. با dotnet run اجرا کنید. هنوز یک خط نشان می‌دهد: 14. اول فراخوانی تمام می‌شود و result را پر می‌کند. سپس WriteLine مقدار result را می‌نویسد. هر دو شکل — نوشتن مستقیم فراخوانی، یا ذخیره بعد نوشتن — از همان return در twice استفاده می‌کنند. twice(0) باید 0 بنویسد. twice(10) باید 20 بنویسد. هر بار Main هرچه twice برگردانده را می‌نویسد. بعد از دیدن شکل ذخیره‌شده، اگر شکل ذخیره‌ای که می‌خواهید فراخوانی یک‌خطی است، فایل نگه‌داشتنی را برگردانید: Console.WriteLine(twice(7)); در Main.
اگر twice هنوز در سرصفحه void بگوید ولی بدنه return n * 2; داشته باشد، ساخت خطا می‌نویسد — void یعنی چیزی برنمی‌گردد، پس return با مقدار جور نیست. اگر سرصفحه int بگوید ولی بدنه return نداشته باشد، ساخت دوباره خطا می‌نویسد — متد int در این شکل مبتدی باید یک int برگرداند. اگر بدنه بنویسد و هرگز برنگرداند، به ایدهٔ صفحهٔ پارامترها برگشته‌اید؛ این صفحه می‌خواهد عدد در دست Main باشد.

void در برابر return تایپ‌دار

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

📊 void body versus return

Shape What the method does What Main often does
void show(int n) writes inside the body calls show(9); and may write nothing else
int twice(int n) return n * 2; writes or stores twice(7)

اشتباه رایج گذاشتن Console.WriteLine(n * 2); داخل twice و نگه داشتن سرصفحهٔ int بدون return است. آن‌وقت ساخت شکایت می‌کند، یا سرصفحه را به void برمی‌گردانید و دیگر مقداری برای نوشتن از فراخوانی در Main ندارید. اشتباه دیگر نوشتن return; بدون مقدار در حالی است که سرصفحه int می‌گوید. return n * 2; را نگه دارید تا نوع عبارت برگشتی با int جور باشد. نوشتن Console.WriteLine("twice"); در Main واژهٔ twice را می‌نویسد؛ متد را صدا نمی‌زند. وقتی می‌خواهید 14 روی صفحه باشد، Console.WriteLine(twice(7)) را نگه دارید.

دموی باقی‌ماندهٔ greet که فقط داخل متد hi lena می‌نویسد می‌تواند در همان فایل بنشیند و صفحه را گیج کند. Main را تا WriteLine که از twice استفاده می‌کند پاک کنید و یک متد که برمی‌گرداند نگه دارید. twice را داخل آکولادهای Main تودرتو نکنید. متدها داخل کلاس، کنار Main می‌نشینند.

حالا می‌توانید static int twice(int n) بنویسید، مقدار محاسبه‌شده را برگردانید، و آن مقدار را از Main بنویسید. صفحه عددی را نشان می‌دهد که Main گرفته، نه خطی که خود متد نوشته باشد. وقتی به مقدار برگشتی نیاز دارید void سرصفحهٔ اشتباه است. صفحهٔ بعدی overloading است؛ آنجا بیش از یک متد می‌توانند وقتی فهرست پارامترشان فرق دارد یک نام مشترک داشته باشند.

صفحه همان چیزی را نگه می‌دارد که Main گرفته

فایلی که نگه می‌دارید وقتی Main مقدار twice(7) را می‌نویسد، 14 می‌نویسد. کلمهٔ return در بدنهٔ متد است، و return به‌عنوان برچسب چاپ‌شده روی صفحه نیست. گیومه دور twice حرف می‌نویسد، نه نتیجهٔ فراخوانی. تودرتو کردن twice داخل Main شکل این درس نیست.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
6
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود