کداکسپلور | CodeExplore
7.84K subscribers
1.89K photos
265 videos
103 files
1.57K links
با کد اکسپلور یاد بگیر، لذت ببر و بروز باش ⚡️😉

سایت کد‌اکسپلور:
CodeExplore.ir
👨🏻‍💻 ارتباط با ما :
@CodeExploreSup
گروه :
@CodeExplore_Gap
تبلیغات در کد اکسپلور :
@CodeExploreAds
Download Telegram
🚀 توابع Currying در Go — ساخت توابع مرحله‌ای و داینامیک با قدرت Closures
در 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