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

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

متدی به نام twice بنویسید که یک int به نام n بگیرد و دو برابر آن عدد را برگرداند. سر با int شروع می‌شود، نه void: static int twice(int n). داخل آکولاد بنویسید return n * 2;. در main نتیجهٔ صدا زدن را چاپ کنید: System.out.println(twice(7));. صفحه باید یک خط نشان دهد: ۱۴. خودِ twice صدا نمی‌زند println. فقط ۱۴ را برمی‌گرداند. main آن عدد را چاپ می‌کند. همین برگرداندن کار این صفحه است.

یک عدد را به main برگردانید

روی صفحهٔ parameters، متدهای greet و show داخل بدنه چاپ می‌کردند. صدا زدن مقدار را داخل می‌فرستاد و متد روی صفحه می‌نوشت. اینجا متد هنوز مقدار می‌گیرد، ولی مقداری هم بیرون می‌فرستد. کلمهٔ return آن مقدار خروجی را علامت می‌زند. main می‌تواند نگهش دارد یا چاپش کند.
یک برنامهٔ کوچک با نام Box.java بسازید. public class روی خط اول باید با نام فایل یکی باشد: public class Box. نام کلاس قدیمی Tip یا Chime را در این فایل نگه ندارید؛ کامپایلر انتظار دارد نام کلاس و نام فایل جور باشند.
بیرون از main، هنوز داخل آکولاد کلاس، بنویسید:
static int twice(int n) {
return n * 2;
}
سر دیگر void نمی‌گوید. می‌گوید int چون مقداری که برمی‌گردد int است. بین پرانتز، int n هنوز پارامتر است — همان ایدهٔ صفحهٔ قبل. بدنه یک دستور دارد: return n * 2;. آن n را در ۲ ضرب می‌کند و حاصل را به کسی که twice را صدا زده برمی‌گرداند. روی این صفحه داخل twice هیچ System.out.println نیست. قبل از کامپایل فایل را ذخیره کنید.

Box.java با twice

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

twice دو برابر n برمی‌گرداند

java
public class Box {
    public static void main(String[] args) {
        System.out.println(twice(7));
    }

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

در پوشه‌ای که Box.java آنجاست بنویسید javac Box.java. وقتی پرانتز و آکولاد و نقطه‌ویرگول‌ها جور باشند، javac خودش خطی نمی‌نویسد. بعد بنویسید java Box — نه java Box.java. پسوند .java را از فرمان دوم بردارید. همین دو فرمان در Windows و macOS یکی است؛ این صفحه املای پوستهٔ جدا برای هیچ‌کدام نمی‌خواهد. برنامه باید یک خط چاپ کند و تمام شود: ۱۴. منتظر تایپ شما نمی‌ماند. اگر ترمینال منتظر ماند، هنوز nextLine از تمرین قدیمی داخل فایل است. آن را پاک کنید و System.out.println(twice(7)); به‌همراه متد twice بالا را نگه دارید. برای خط اشتباه روی صفحه لازم نیست JDK را دوباره نصب کنید.

یک اجرا را به ترتیب بخوانید. Java از main شروع می‌کند. صدای twice(7) عدد ۷ را داخل n می‌فرستد. داخل twice، return n * 2; عدد ۱۴ را حساب می‌کند و همان ۱۴ را به main برمی‌گرداند. بعد println عدد ۱۴ را می‌نویسد. twice خودش چیزی روی صفحه ننوشت. اگر صدا را به twice(3) عوض کنید، صفحه باید ۶ نشان دهد. بدنهٔ متد همان است؛ فقط آرگومان عوض می‌شود و حاصل برگشتی با آن عوض می‌شود. اگر صفحه به‌جای ۱۴ عدد ۷ نشان دهد، یا n را داخل twice چاپ کرده‌اید یا آرگومان را در main بدون صدا زدن twice چاپ کرده‌اید — دو برابر کردن را روی خط return بگذارید و نتیجهٔ صدا زدن را چاپ کنید.
می‌توانید مقدار برگشتی را قبل از چاپ داخل main در یک نام نگه دارید:
int result = twice(7);
System.out.println(result);
آن هم یک خط نشان می‌دهد: ۱۴. اول صدا زدن تمام می‌شود و result پر می‌شود. بعد println همان result را می‌نویسد. هر دو شکل — چاپ مستقیم صدا زدن، یا نگه داشتن و بعد چاپ — از همان return داخل twice استفاده می‌کنند.

مقداری را چاپ کنید که main گرفته

اگر خط دیگری روی صفحه می‌خواهید، فقط عدد داخل صدا زدن را عوض کنید. return n * 2; را دست نزنید. بعد از هر تغییر دوباره کامپایل و اجرا کنید: javac Box.java و بعد java Box. twice(0) باید ۰ چاپ کند. twice(10) باید ۲۰ چاپ کند. هر بار main همان چیزی را چاپ می‌کند که twice برگردانده.
اگر twice در سر هنوز void بگوید ولی بدنه return n * 2; داشته باشد، javac خطا می‌نویسد — void یعنی چیزی برنمی‌گردد، پس return با مقدار جور نیست. اگر سر int بگوید ولی بدنه return نداشته باشد، باز javac خطا می‌نویسد — متد int روی این شکل مبتدی باید در هر مسیر یک int برگرداند. اگر بدنه چاپ کند و هرگز return نکند، به ایدهٔ صفحهٔ Tip برگشته‌اید؛ این صفحه می‌خواهد عدد در دست main باشد.

void در برابر بازگشت تایپ‌دار

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

📊 بدنهٔ void در برابر return

شکل متد چه می‌کند main معمولاً چه می‌کند
void show(int n) داخل بدنه چاپ می‌کند show(9); را صدا می‌زند و شاید چیز دیگری چاپ نکند
int twice(int n) return n * 2; twice(7) را چاپ یا نگه می‌دارد

اشتباه رایج گذاشتن System.out.println(n * 2); داخل twice و نگه داشتن سر به‌صورت int بدون return است. آن وقت javac اعتراض می‌کند، یا سر را دوباره void می‌کنید و دیگر مقداری برای چاپ از راه صدا زدن در main ندارید. اشتباه دیگر نوشتن return; بدون مقدار است در حالی که سر int می‌گوید. return n * 2; را نگه دارید تا نوع عبارت برگشتی با int جور باشد. نوشتن System.out.println("twice"); در main کلمهٔ twice را چاپ می‌کند؛ متد را صدا نمی‌زند. وقتی می‌خواهید ۱۴ روی صفحه باشد، println(twice(7)) را نگه دارید.

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

پیش از overloading

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

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

آماده شروع

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

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

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

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

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