طرح‌چه

تابع (function) | گولنگ به زبان ساده

یک ماه پیش

تابع (function) | گولنگ به زبان ساده
تابع به ما کمک میکند تا بخش‌های مختلف یک برنامه را از هم تفکیک کنیم و به آن نظم بیشتری بدهیم.

تابع یک بلوک مستقل از کد است که می تواند ورودی هایی (پارامترها) بگیرد, عملیاتی روی آن ها انجام دهد و سپس نتیجه ای (خروجی) تولید کند.

تعریف و فراخوانی تابع

برای تعریف تابع از کلمه کلیدی func استفاده میکنیم:

func example() {
	
}

تابع به ما این امکان را می دهد که بخشی از برنامه را تنها یکبار بنویسیم و هر زمان که نیاز است آن را فراخوانی کنیم.

package main

import "fmt"

func main() {
	hello()
	hello()
	hello()
}

func hello() {
	fmt.Println("hello world")
}

در مثال بالا یکبار تابع hello را تعریف کردیم و ۳ بار آن را فراخوانی کردیم که باعث میشود متن hello world سه بار در صفحه چاپ شود.

پارامترهای ورودی و خروجی

تابع میتواند یک یا چندین مقدار را به عنوان ورودی (پارامتر) بپذیرد. پارامترها یا ورودی های یک تابع, متغیرهایی هستند که با ویرگول از هم جدا شده اند.

package main

import "fmt"

func main() {
	introduce("John Doe", 20)
	introduce("Alex Martini", 30)
	introduce("Mahdi Khanzadi", 31)
}

func introduce(name string, age int) {
	fmt.Printf("%s is %d years old\n", name, age)
}

در مثال بالا تابع introduce را تعریف کردیم که دو مقدار name و age را در صفحه چاپ میکند. این تابع را سه بار با مقادیر مختلف فراخوانی کردیم.

دستور return باعث خاتمه کار تابع و همچنین برگرداندن مقادیر میشود. برای برگرداندن مقادیر به خروجیِ تابع باید نوع مقادیر را مشخص کرد.

package main

import (
	"fmt"
)

func main() {
	halt()

	introduction := introduce("Mahdi Khanzadi", 31)
	fmt.Println(introduction)
}

func halt() {
	fmt.Println("hello")
	return
	fmt.Println("middle")
}

func introduce(name string, age int) string {
	return fmt.Sprintf("%s is %d years old", name, age)
}

در مثال بالا , خط آخر از تابع halt اجرا نمیشود زیرا قبل از آن return باعث خروج از تابع میشود.

در گولنگ یک تابع میتواند بیشتر از یک مقدار را برگرداند. در هنگام فراخوانی تابع اگر به یک یا چند مقدار برگشتی نیازی ندارید میتوانید با استفاده از ـ آنها را نادیده بگیرید.

package main

import (
	"fmt"
)

func main() {
	name, _ := user()

	fmt.Println(name)
}

func user() (string, int) {
	return "Mahdi Khanzadi", 31
}

همانند پارامترهای ورودی, میتوان پارامترهای خروجی را نیز نامگذاری کرد. در صورتی که پارامتر های خروجی را نامگذاری کنید با return کردن باعث خاتمه تابع و برگرداندن مقادیر پارامترهای خروجی میشوید.

package main

import (
	"fmt"
)

func main() {
	name, age := user()

	fmt.Println(name, age)
}

func user() (name string, age int) {
	name = "John Doe"
	age = 20

	return
}

در مثال بالا در خط آخر از تابع user تنها return را بدون هیچ آرگومانی صدا زدیم که این باعث برگرداندن مقادیر name و age به خروجی میشود.

تابع بازگشتی

به تابعی که خودش را فراخوانی میکند تابع بازگشتی می گویند. برای مثال در کد زیر فاکتوریل را با استفاده از تابع بازگشتی محاسبه می کنیم:

package main

import (
	"fmt"
)

func main() {
	fmt.Println(factorial(5))
}

func factorial(n int) int {
	if n == 0 || n == 1 {
		return 1
	}
	return n * factorial(n-1)
}

قسمت قبلی: نوع داده map | گولنگ به زبان ساده

قسمت بعدی: نوع داده struct | گولنگ به زبان ساده


دیدگاه ها