شما میتونین با این روش کدنویسی به گونه ای به یک متد آرگومان تزریق کنین که در هر مرحله یک مقدار به متد اضافه بشه و در نهایت عملیات نهایی انجام بشه . به طور مثال ما یک متد داریم که وظیفه مرج کردن چند داده رو داره که این کار رو میشه به دو روش انجام داد.
<?php //Method 1 function mergeResults($arg1,$arg2,$arg3) { return [ 'res1' => $arg1, 'res2' => $arg2, 'res3' => $arg3, ]; } $result1 = [1]; $result2 = [2]; $result3 = [3]; var_dump(mergeResults($result1,$result2,$result3));
//Method 2 function mergeResultsCurry($arg1) { return function ($arg2) use ($arg1) { return function ($arg3) use ($arg1,$arg2) { return [ 'res1' => $arg1, 'res2' => $arg2, 'res3' => $arg3, ]; }; }; } $result1 = [1]; $res = mergeResultsCurry($result1); $result2 = [2]; $res2 = $res($result2); $result3 = [3]; $res3 = $res2($result3); $result4 = [4]; $res4 = $res2($result4); var_dump($res3); // var_dump($res4);
خب فکر کنم همینجا معلوم شد که curry چیکار می کنه برامون :
توی روش اول نیاز همه نتایج آماده بشه و در نهایت توی متد فراخوانی بشه و کلی باید برنامه منتظر بمونه برای 3 پروسه که آیا با خطا باشه یا نباشه اما توی روش دوم نتایج مرحله به مرحله اضافه میشه به متد و اینکه حتی میتونید خروجی های مختلفی از مراحل قبل تر برای داده جدید بگیرید .
در اینجا حتما میگین کاربرد این روش چیه ؟؟؟ خب باید بگم که توی پروسه های ذخیره سازی ، جلوگیری از تکرار کار بیهوده برای چند خروجی مختلف از داده های ثابت به عنوان مثال مسیردهی و دیباگ کردن و ...
https://medium.com/nerd-for-tech/functional-programming-in-php-part-2-currying-2353b71dbe7a
https://stackoverflow.com/questions/1609985/is-it-possible-to-curry-method-calls-in-php
https://zaemis.blogspot.com/2009/06/currying-in-php.html
امیدوارم با این مقاله بتونین کد های بهینه و تمیز تر داشته باشید ... .