You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
في حالة رغبتك في الدخول في التفاصيل، إليك طريقة الاستخدام المتقدمة لتقنية currying للدوالّ ذات الوسطاء المتعددة والّتي يمكننا استخدامها أعلاه.
106
+
في حالة رغبتك في الدخول في التفاصيل، إليك طريقة الاستخدام المتقدمة لتقنية currying للدوالّ ذات الوسطاء المتعددة والّتي يمكننا استخدامها أعلاه.
107
107
108
108
وهي مختصرة جدًا:
109
109
@@ -157,16 +157,16 @@ function curried(...args) {
157
157
عند تشغيله، هناك فرعين للتنفيذ من الجملة الشرطية `if`:
158
158
159
159
1. سيكون الاستدعاء الآن هكذا: إن كان عدد الوسطاء `args` المُمرّرة هو نفس العدد الدالة الأصليّة المعرّفة لدينا (`func.length`) أو أكثر، عندها نمرّر الاستدعاء له فقط.
160
-
2. وإلا سيكون الاستدعاء جزئيًا: لم تُستدعى الدالّة `func` بعد. وإنما أعيد بدلًا منها دالّة المغلِّفة أخرى `pass`، والتي ستُعيد تطبيق الدالة `curried` مع تقديم الوسطاء السابقين مع الوسطاء الجدد. وثمّ في استدعاء الجديد سنحصل إما على دالة جزئية جديدة (إن لم يكُ عدد الوسطاء كافي) أو النتيجة النهائية.
160
+
2. وإلا سيكون الاستدعاء جزئيًا: لم تُستدعى الدالّة `func` بعد. وإنما أعيد بدلًا منها دالّة المغلِّفة أخرى `pass`، والتي ستُعيد تطبيق الدالة `curried` مع تقديم الوسطاء السابقين مع الوسطاء الجدد. وثمّ في استدعاء الجديد سنحصل إما على دالة جزئية جديدة (إن لم يكُ عدد الوسطاء كافيا) أو النتيجة النهائية.
161
161
162
162
لنرى مثلًا ما يحدث في حال الاستدعاء الدالة هكذا `sum(a, b, c)`. أي بثلاث وسطاء، وبذلك يكون `sum.length = 3`.
163
163
164
164
عند استدعاء `curried(1)(2)(3)`:
165
165
166
166
1. الاستدعاء الأول `curried (1)` تحفظ `1` في بيئته اللغوية، ويُعيد دالّة المغلف `pass`.
167
167
2. يُستدعى المغلّف `pass` مع الوسيط المُمرّر `(2)`: إذ يأخذ الوسطاء السابقين (`1`)، ويدمجهم مع الوسيط الذي حصل عليه وهو `(2)` ويستدعي الدالّة `curried(1, 2)` مع استخدام جميع ما حصل عليه من وسطاء. وبما أن عدد الوسطاء لا يزال أقل من 3 ، فإن الدالّة `curry` ستُعيد الدالّة `pass`.
168
-
3. يُستدعى المغلّف `pass` مرة أخرى مع الوسيط المُمرّر `(3)`: ومن أجل الاستدعاء التالي `pass (3)` سيأخذ الوسطاء السابقين (`1`, `2`) ويضيف لهم الوسيط `3`، ليكون الاستدعاء هكذا `curried(1, 2, 3)`- أخيرًا لدينا ثلاث وسطاء، والّذين سيمرّروا للدالّة الأصلية.
169
-
إذا لم تتوضح الفكرة حتى الآن، فما عليك إلا تتبع تسلسل الاستدعاءات في عقلك أو على الورقة وستتوضح الأمور أكثر.
168
+
3. يُستدعى المغلّف `pass` مرة أخرى مع الوسيط المُمرّر `(3)`: ومن أجل الاستدعاء التالي `pass (3)` سيأخذ الوسطاء السابقين (`1`, `2`) ويضيف لهم الوسيط `3`، ليكون الاستدعاء هكذا `curried(1, 2, 3)`- أخيرًا لدينا ثلاث وسطاء، والّذين سيمرّرون للدالّة الأصلية.
169
+
إذا لم تتوضح الفكرة حتى الآن، فما عليك إلا تتبع تسلسل الاستدعاءات في عقلك أو على الورقة وستتوضح الأمور أكثر.
0 commit comments