توابع (Functions)

تعریف و فراخوانی توابع، پارامترها، مقادیر بازگشتی و چند مقدار بازگشتی.

تابع چیست؟

تابع بلوکی از کد است که کار مشخصی انجام می‌دهد و می‌توان آن را بارها فراخوانی کرد. توابع کد را ماژولار، قابل استفاده مجدد و خوانا می‌کنند.

تعریف تابع

func greet() {
    fmt.Println("سلام!")
}

func add(a int, b int) int {
    return a + b
}

ساختار: func نام(پارامترها) نوع‌بازگشتی { }

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

func main() {
    greet()                    ← فراخوانی بدون آرگومان

    result := add(5, 3)        ← با آرگومان
    fmt.Println(result)        ← 8
}

پارامترهای هم‌نوع فشرده

// به جای: func add(a int, b int) int
func add(a, b int) int {
    return a + b
}

چند مقدار بازگشتی (ویژگی فوق‌العاده Go!)

Go می‌تواند چند مقدار برگرداند — رایج‌ترین الگو: نتیجه + خطا:

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, fmt.Errorf("تقسیم بر صفر")
    }
    return a / b, nil
}

result, err := divide(10, 2)
if err != nil {
    fmt.Println("خطا:", err)
} else {
    fmt.Println("نتیجه:", result)
}
الگوی (result, error) قلب مدیریت خطای Go است — تقریباً هر تابع کتابخانه استاندارد از آن استفاده می‌کند!

نادیده گرفتن مقدار بازگشتی

result, _ := divide(10, 2)   ← خطا نادیده گرفته می‌شود (خطرناک!)

مقدار پیش‌فرض پارامتر؟

Go از مقدار پیش‌فرض پارامتر پشتیبانی نمی‌کند! راه جایگزین: پارامترهای variadic یا struct تنظیمات.

توابع به‌عنوان مقدار

توابع در Go «شهروند درجه یک» هستند — می‌توان آن‌ها را به متغیر داد و پاس کرد:

func square(x int) int { return x * x }

f := square           ← تابع در متغیر
fmt.Println(f(5))     ← 25

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

ابزارهای مرتبط