🚀 توابع Currying در Go — ساخت توابع مرحلهای و داینامیک با قدرت Closures
در Go، مثل زبانهای فانکشنال، میتونی توابعی بسازی که به جای گرفتن همه آرگومانها یکجا، هر آرگومان رو در یک مرحله بگیرن. به این تکنیک میگیم:
🎯 Currying
یعنی تبدیل تابعی با چند آرگومان به توابع تو در تو، که هر کدوم فقط یک آرگومان میگیرن.
✅ مثال واقعی: ضرب با عدد ثابت
📌 اینجا تابع multiply(10) خودش یه تابع جدید میسازه (times10) که همیشه با ۱۰ ضرب میکنه.
🧠 به چه دردی میخوره؟
✅ ساخت توابع با پارامترهای پیشفرض
✅ پیادهسازی سادهتر توابع داینامیک
✅ خوانایی و تستپذیری بهتر
✅ کمک به معماری فانکشنال در Go با ترکیبپذیری بالا
🧩 حتی میتونی با Genericها توابع کلی بسازی:
حالا میتونی توابع ۲ پارامتری رو به صورت مرحلهای صدا بزنی:
#GoLang #Currying #Closure #Functions #Backend #برنامه_نویسی #گو
☕️Telegram | Website | Discord
در Go، مثل زبانهای فانکشنال، میتونی توابعی بسازی که به جای گرفتن همه آرگومانها یکجا، هر آرگومان رو در یک مرحله بگیرن. به این تکنیک میگیم:
🎯 Currying
یعنی تبدیل تابعی با چند آرگومان به توابع تو در تو، که هر کدوم فقط یک آرگومان میگیرن.
✅ مثال واقعی: ضرب با عدد ثابت
func multiply(x int) func(int) int {
return func(y int) int {
return x * y
}
}
func main() {
times10 := multiply(10)
fmt.Println(times10(3)) // 30
fmt.Println(times10(7)) // 70
}
📌 اینجا تابع multiply(10) خودش یه تابع جدید میسازه (times10) که همیشه با ۱۰ ضرب میکنه.
🧠 به چه دردی میخوره؟
✅ ساخت توابع با پارامترهای پیشفرض
✅ پیادهسازی سادهتر توابع داینامیک
✅ خوانایی و تستپذیری بهتر
✅ کمک به معماری فانکشنال در Go با ترکیبپذیری بالا
🧩 حتی میتونی با Genericها توابع کلی بسازی:
func curry2[A, B, C any](f func(A, B) C) func(A) func(B) C {
return func(a A) func(B) C {
return func(b B) C {
return f(a, b)
}
}
}
حالا میتونی توابع ۲ پارامتری رو به صورت مرحلهای صدا بزنی:
add := func(x, y int) int { return x + y }
curriedAdd := curry2(add)
fmt.Println(curriedAdd(2)(3)) // 5
#GoLang #Currying #Closure #Functions #Backend #برنامه_نویسی #گو
☕️Telegram | Website | Discord
🔥7