// body of the function
}برای تعریف تابع باید از کلید واژه ی func استفاده کنیمنامگذاری تابع از قواعد نامگذاری شناسه ها پشتیبانی می کنه و باید یکتا باشه. همچنین نباید از کلمات کلیدی و نام توابع درونی برای اسم گذاری توابع استفاده کنیمهر تابع می تونه تعدادی ورودی داشته باشه و یا اصلا ورودی نداشته باشه. لیست پارامتر ها داخل پرانتزها قرار میگیره و باید نوع اون ها هم مشخص باشههر تابع می تونه تعدادی نوع برگشتی یا return types، داشته باشه یا نداشته باشه. این لیست بعد از پرانتزها قرار میگیره و فقط نوع داده باید نوشته بشه. همچنین اگه تعداد اون ها ۲ تا یا بیشتر باشه باید داخل پرانتز قرار بگیرن.تو قسمت body of the function، کدهای ما نوشته میشن. اگه تابع مقدار برگشتی داشته باشه با کلمه کلیدی return اون رو برمی گردونیم.یه مثال کاربردی و ساده رو بیشتر توضیح میدم:package main
import "fmt"
func plus(a int, b int) int {
return a + b
}
func main() {
result := plus(4, 13)
fmt.Println(result)
}تو این مثال یه تابع به اسم plus نوشتیم که دوتا پارامتر a , b که از نوع int هستن رو میگیره و با هم جمع می کنه و نتیجه رو برمی گردونه که اون هم از نوع int هست.تو بدنه ی تابع main ما تابع plus رو با اسم تابع و دو تا پارامتر ۴ , ۱۳ فراخوانی کردیم و چون مقدار بازگشتی داره اون رو به result نسبت دادیم. مقدار بازگشتی تابع که میشه ۱۷ داخل result ریخته میشه و تو خط بعدی چاپ میشه.مثال با چند نوع بازگشتیpackage main
import "fmt"
func vals() (int, int) {
return 3, 7
}
func main() {
a, b := vals()
fmt.Println(a)
fmt.Println(b)
_, c := vals()
fmt.Println(c)
}تو این مثال میبینید که تابع vals دو مقدار ۳ و ۷ رو بر می گردونه که ما اون ها رو توی متغیرهای a و b ریختیم و چاپ کردیم.اگه توجه کنید تو خط بعدی مقادیر بازگشتی رو به _ و c دادیم. توجه کنید که _ برای وقتی استفاده میشه که ما یک یا چند خروجی یه تابع رو نیاز نداشته باشیم. تو این مثال چون اول _ و سپس c قرار گرفته، پس مقدار ۳ استفاده نمیشه و مقدار ۷ توی c ریخته میشه.به _ ، blank identifier نیز گفته میشه. برای وقتی استفاده میشه که بخوایم تعدادی از خروجی های یه تابع صرف نظر کنیم. احتمالا جاهای زیادی نیاز باشه ازش استفاده کنید.مقادیر بازگشتی نام گذاری شده (Named Return Values)تو گو می تونیم مقادیر بازگشتی یه تابع رو اسم گذاری کنیم:package main
import "fmt"
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum – x
return
}
func main() {
fmt.Println(split(17))
}توجه کنید که تو این مورد ما return رو بدون مقادیر بازگشتی استفاده کردیم. تو این حالت که بهش Naked Return گفته میشه، مقادیر بازگشتی اسم گذاری شده برگشت داده میشن.سعی کنید از این نوع return کمتر استفاده کنید و در صورت نیاز فقط تو توابعی که کوتاه هستن استفاده کنید، چون باعث کاهش خوانایی کد میشه.توابع متنوع در گولنگ (Variadic Functions)یکی از قابلیت هایی گو داره اینه که می تونید توابعی رو تعریف کنید که به شما اجازه می ده هر چقدر پارامتر نیاز دارید بدون تعریف وارد تابع کنید.این نوع تابع بیشتر برای توابعی به کار میره که توی اون ها همه ی ورودی ها از یه نوع هستن و یه کار خاص که چندان به ورودی ها وابسته نیست انجام میشه مثل تابع جمع.package main
import "fmt"
func sum(nums …int) {
fmt.Print(nums, " ")
total := 0
for _, num := range nums {
total += num
}
fmt.Println(total)
}
func main() {
sum(1, 2)
sum(1, 2, 3)
nums := []int{1, 2, 3, 4}
sum(nums…)
}توابع نانشناس در گولنگ (Anonymous Functions)در زبان گولنگ می توانیم تابع بدون نام تعریف کنیم که به عنوان توابع ناشناس شناخته می شن.package main
import "fmt"
func main() {
// anonymous function
var sum = func(n1, n2 int) int {
sum := n1 + n2
return sum
}
// function call
result := sum(5, 3)
fmt.Println("Sum is:", result)
}از آنجایی که توابع ناشناس نامی ندارد ما در بعضی اوقات آن ها را به یک متغیر اختصاص می دیم سپس از نام متغیر برای فراخوانی تابع استفاده می کنیم. در این مثال می بینید که ما از sum برای فراخوانی تابع استفاده می کنیم.مانند توابع معمولی ما میتونیم برای تابع ناشناس پارامتر تعریف کنیم و مقداری را از تابع برگردانیم در این مثال تابع دو مقدار با نوع داده int دریافت میکنه و یک خروجی با نوع int داره.تابع ناشناس را می توانیم برای عملکردهایی که نیازی به نامگذاری ندارند و معمولا برای استفاده کوتاه مدت هست، استفاده کنیم.اما یکی از موارد کاربردی توابع ناشناس در گولنگ پاس دادن آن ها به توابعی هستن که تابعی را به عنوان پارامتر ورودی دریافت میکنن. در مثال زیر ما یک تابع تعریف کردیم که در پارامتر سوم یک تابع دریافت میکنه که باید دو ورودی int و یک خروجی int داشته باشه.package main
import "fmt"
func add10AndSum(num1 int, num2 int, sum func(n1, n2 int) int) {
result := sum(num1+10, num2+10)
fmt.Println("Sum by adding 10 is:", result)
}
func main() {
add10AndSum(5, 3, func(n1, n2 int) int {
sum := n1 + n2
return sum
})
}توابع از پیش تعریف شده (Built-in Function)در گو علاوه بر تابع هایی که توسط کابر تعریف میشه. یکسری توابع وجود داره که از قبل توسط طراحان این زبان برای سهولت کار برنامه نویسان نوشته شدن. از این لینک می تونید لیست اون ها رو ببینید.
نوشته آموزش golang – قدم نهم: تابع اولین بار در ویرگول پدیدار شد.
گردآوری توسط ایده طلایی