مقدار برگشتی از یک متد
متدها میتوانند مقدار برگشتی از هر نوع دادهای داشته باشند. این مقادیر میتوانند در محاسبات یا به دست آوردن یک داده مورد استفاده قرار بگیرند. در زندگی روزمره فرض کنید که کارمند شما یک متد است و شما او را صدا میزنید و از او میخواهید که کار یک سند را به پایان برساند. سپس از او میخواهید که بعد از اتمام کارش سند را به شما تحویل دهد. سند همان مقدار برگشتی متد است. نکته مهم در مورد یک متد، مقدار برگشتی و نحوه استفاده شما از آن است. برگشت یک مقدار از یک متد آسان است. کافیست در تعریف متد به روش زیر عمل کنید :
func MethodName() returnType { return value }
returnType در اینجا نوع دادهای مقدار برگشتی را مشخص میکند (int،bool،…). در داخل بدنه متد کلمه کلیدی return و بعد از آن یک مقدار یا عبارتی که نتیجه آن یک مقدار است را مینویسیم. نوع این مقدار برگشتی باید از انواع ساده بوده و در هنگام نامگذاری متد و بعد از پرانتزها ذکر شود. مثال زیر یک متد که دارای مقدار برگشتی است را نشان میدهد.
1: package main 2: 3: import "fmt" 4: 5: func CalculateSum() int { 6: var firstNumber int = 10 7: var secondNumber int = 5 8: 9: var sum = firstNumber + secondNumber 10: 11: return sum 12: } 13: 14: func main() { 15: var result = CalculateSum() 16: fmt.Printf("Sum is %d.", result) 17: }
Sum is 15.
همانطور که در خط 5 مثال فوق مشاهده میکنید هنگام تعریف متد از کلمه int استفاده کردهایم که نشان دهنده آن است که متد ما دارای مقدار برگشتی از نوع اعداد صحیح است. در خطوط 6 و 7 دو متغیر تعریف و مقدار دهی شدهاند.
توجه کنید که این متغیرها، متغیرهای محلی هستند. و این بدان معنی است که این متغیرها در سایر متدها مانند متد ()main قابل دسترسی نیستند و فقط در متدی که در آن تعریف شدهاند، قابل استفاده هستند. در خط 9 جمع دو متغیر در متغیر sum قرار میگیرد. در خط 11 مقدار برگشتی sum توسط دستور return فراخوانی میشود. در داخل متد ()main یک متغیر به نام result در خط 15 تعریف میکنیم و متد CalculateSum() را فراخوانی میکنیم.
متد CalculateSum() مقدار 15 را بر میگرداند که در داخل متغیر result ذخیره میشود. در خط 16 مقدار ذخیره شده در متغیر result چاپ میشود. متدی که در این مثال ذکر شد متد کاربردی و مفیدی نیست. با وجودیکه کدهای زیادی در متد بالا نوشته شده ولی همیشه مقدار برگشتی 15 است، در حالیکه میتوانستیم به راحتی یک متغیر تعریف کرده و مقدار 15 را به آن اختصاص دهیم. این متد در صورتی کارامد است که پارامترهایی به آن اضافه شود که در درسهای آینده توضیح خواهیم داد. هنگامی که میخواهیم در داخل یک متد از دستور if یا switch استفاده کنیم باید تمام کدها دارای مقدار برگشتی باشند. برای درک بهتر این مطلب به مثال زیر توجه کنید :
1: package main 2: 3: import "fmt" 4: 5: func GetNumber() int { 6: var number int 7: fmt.Print("Enter a number greater than 10: ") 8: fmt.Scanln(&number) 9: 10: if number > 10 { 11: return number 12: } else { 13: return 0 14: } 15: } 16: 17: func main() { 18: var result int = GetNumber() 19: fmt.Printf("Result = %d.", result) 20: }
Enter a number greater than 10: 11 Result = 11
Enter a number greater than 10: 9 Result = 0
در خطوط 15-5 یک متد با نام GetNumber() تعریف شده است که از کاربر یک عدد بزرگتر از 10 را میخواهد. اگر عدد وارد شده توسط کاربر درست نباشد متد مقدار صفر را بر میگرداند. و اگر قسمت else دستور ifو یا دستور return را از آن حذف کنیم در هنگام اجرای برنامه با پیغام خطا مواجه میشویم.
چون اگر شرط دستور if نادرست باشد (کاربر مقداری کمتر از 10 را وارد کند) برنامه به قسمت else میرود تا مقدار صفر را بر گرداند و چون قسمت else حذف شده است برنامه با خطا مواجه میشود و همچنین اگر دستور return حذف شود چون برنامه نیاز به مقدار برگشتی دارد پیغام خطا میدهد. و آخرین مطلبی که در این درس میخواهیم به شما آموزش دهیم این است که شما میتوانید از یک متد که مقدار برگشتی ندارد، خارج شوید. حتی اگر متد هیچ نوع برگشتی نداشته باشد، باز هم میتوانید کلمه کلیدی return را در آن به کار ببرید. استفاده از return باعث خروج از بدنه متد و اجرای کدهای بعد از آن میشود.
package main import "fmt" func TestReturnExit() { fmt.Println("Line 1 inside the method TestReturnExit()") fmt.Println("Line 2 inside the method TestReturnExit()") return //The following lines will not execute fmt.Println("Line 3 inside the method TestReturnExit()") fmt.Println("Line 4 inside the method TestReturnExit()") } func main() { TestReturnExit(); fmt.Printf("Hello World!") }
Line 1 inside the method TestReturnExit() Line 2 inside the method TestReturnExit() Hello World!
در برنامه بالا نحوه خروج از متد با استفاده از کلمه کلیدی return و نادیده گرفتن همه کدهای بعد از این کلمه کلیدی نشان داده شده است. در پایان برنامه متد تعریف شده (TestReturnExit()) در داخل متد ()main فراخوانی و اجرا میشود. نکته آخر اینکه یک متد می تواند دارای چند مقدار برگشتی باشد. به مثال زیر توجه کنید :
package main import "fmt" func ShowMessage(str1, str2 string) (string, string) { return str1 , str2 } func main() { fmt.Println(ShowMessage("Hello", " World!")) }
Hello World!
همانطور که در کد بالا مشاهده می کنید، برای متدهایی که دارای چند نوع برگشتی هستند باید نوع تمامی مقادیر برگشتی را در داخل پرانتز نوشته و آنها را با کاما از هم جدا کنید، مانند ((string, string)).