Baron
Baron
خواندن ۲ دقیقه·۲ سال پیش

Function currying

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

توی functional programming یه بحثی هست به اسم function currying. ایده‌اش هم اینه که ما یه تابع داریم با n تا ورودی و تبدیلش میکنیم به n تا تابع که هرکدوم یه ورودی دارند. از ویکی پدیا:

Curryification is useful in both practical and theoretical settings. In functional programming languages, and many others, it provides a way of automatically managing how arguments are passed to functions and exceptions. In theoretical computer science, it provides a way to study functions with multiple arguments in simpler theoretical models which provide only one argument.

خب بیاید با یه مثال بررسی کنیم:(مثال ها از go هستن)

تو این مثال اول از همه یه تایپ مشخص کردم که یه ورودی داره و خروجیش boolean هست و صرفا هم Predicate هستش(مشخص میکنه ورودی تابع فلان ویژگی رو داره یا نه)

بعد از اون تابع فیلتر رو ساختم ایدش اینکه یه لیست داریم میخوام تبدیل کنیم به لیستی از اعضاش که ویژگی خاصی رو دارن(مثلا فرض لیستی از student داریم و میخوایم لیستی از اونها رو داشته باشیم که معدل بالای ۱۶ دارند)

حالا توی main اول از همه یه لیست از چند تا عدد صحیح ساختم و بعدش با استفاده از تابع Filter اعداد زوج و فرد رو در اورد و چاپشون کردم

تا اینجا از function currying استفاده نشده و ما یه تابع Filter دوتا ورودی داره

حالا به کد ریفکتور شده دقت کنید :

تابع Filter دیگه یه ورودی داره اما خروجیش یه تابع دیگه هستش که اون تابع یه ورودی Predicate داره

به فراخوانی هم توی main دقت کنید اول خروجی تابه Filter رو ریختیم توی fn. حالا fn خودش یه تابع هستش که که predicate میگیره.

یبار fn رو برای اعداد زوج یبار هم برای اعداد فرد فراخوانی کردم.

خلاصه همین، مراقب خودتون باشید








gosoftwareبرنامه نویسینرم افزاربرنامه‌نویسی فانکشنال
In the trees
شاید از این پست‌ها خوشتان بیاید