إج٠ع ع٠طرÙÙ Ù Ø¬Ù ÙØ¹Ø© Ø¹Ø´ÙØ§Ø¦ÙØ© Ù Ù Ø§ÙØ£ÙÙØ§Ø³
Ø¥ÙØªØ¨ Ø¯Ø§ÙØ© sum Ø§ÙØªÙ تعÙ
Ù ÙÙØ°Ø§:
sum(1)(2) == 3; // 1 + 2
sum(1)(2)(3) == 6; // 1 + 2 + 3
sum(5)(-1)(2) == 6
sum(6)(-1)(-2)(-3) == 0
sum(0)(1)(2)(3)(4)(5) == 15
تÙÙ ÙØ: رب٠ا ØªØØªØ§Ø¬ Ø¥ÙÙ ÙØ§Ø¦Ù Ù Ø®ØµÙØµ ÙÙØªØÙÙÙ Ø§ÙØ¨Ø¯Ø§Ø¦Ù ÙØ¯Ø§ÙتÙ.
- Ø£ÙÙÙ
ا ÙØ§Ùت Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØªÙ Ø³ÙØ³ØªØ¹Ù
ÙÙØ§ ÙÙØ¹Ù
Ù ÙØ°Ø§ Ø§ÙØ´ÙØ¡Ø ÙÙØ§ Ø¨Ø¯Ù Ø£Ù ØªÙØ±Ø¬Ø¹
âsumâØ¯Ø§ÙØ©. - عÙ٠تÙÙ Ø§ÙØ¯Ø§ÙØ© أ٠تØÙظ اÙÙÙÙ Ø© Ø§ÙØØ§ÙÙØ© بÙÙ ÙÙ٠استدعاء ÙØ§Ùآخر Ø¯Ø§Ø®Ù Ø§ÙØ°Ø§Ùرة.
- ØØ³Ø¨ اÙÙ
ÙÙ
ÙØ© اÙÙ
ÙØ¹Ø·Ø§Ø©Ø ÙØ¬Ø¨ أ٠تتØÙÙ Ø§ÙØ¯Ø§ÙØ© Ø¥Ù٠عدد ØÙÙ ÙØ³ØªØ¹Ù
ÙÙØ§ ÙÙ
â==â. Ø§ÙØ¯ÙØ§Ù ÙØ§Ø¦Ùات ÙØ°Ø§ ÙØ¹Ù ÙÙØ© Ø§ÙØªØÙÙ٠ستÙÙØ¹ Ù٠ا شرØÙا ÙÙ ÙØµÙ Â«Ø§ÙØªØÙÙÙ Ù Ù ÙØ§Ø¦Ù Ø¥ÙÙ ÙÙÙ Ø© Ø£ÙÙÙØ©Â»Ø ÙÙÙ Ù٠أ٠ÙÙØ¯ÙÙ ØªØ§Ø¨ÙØ¹Ùا Ø®Ø§ØµÙØ§ ÙÙØ¹Ùد ذÙÙ Ø§ÙØ¹Ø¯Ø¯.
Ø¥ÙÙ Ø§ÙØ´ÙÙØ±Ø©:
- For the whole thing to work anyhow, the result of
summust be function. - That function must keep in memory the current value between calls.
- According to the task, the function must become the number when used in
==. Functions are objects, so the conversion happens as described in the chapter تØÙÙ٠اÙÙØ§Ø¦Ùات Ø¥ÙÙ ÙÙÙ Ù ÙØ±Ø¯Ù, and we can provide our own method that returns the number.
Now the code:
function sum(a) {
let currentSum = a;
function f(b) {
currentSum += b;
return f;
}
f.toString = function () {
return currentSum;
};
return f;
}
alert(sum(1)(2)); // 3
alert(sum(5)(-1)(2)); // 6
alert(sum(6)(-1)(-2)(-3)); // 0
alert(sum(0)(1)(2)(3)(4)(5)); // 15
ÙØ§ØØ¸ بأÙÙ Ø¯Ø§ÙØ© âsumâ ØªØ¹Ù
Ù Ù
Ø±ÙØ© ÙØ§ØØ¯Ø© ÙÙØ· ÙØ§ ØºÙØ±Ø ÙØªÙØ¹ÙØ¯ Ø§ÙØ¯Ø§ÙØ© âfâ.
ÙØ¨Ø¹Ø¯Ùا ÙÙ ÙÙ٠استدعاء ÙÙÙÙØ§Ø ØªÙØ¶ÙÙ âfâ Ø§ÙÙ
ÙØ¹Ø§Ù
٠إÙ٠اÙÙ
جÙ
ÙØ¹ âcurrentSumâ ÙØªÙØ¹ÙØ¯ ÙÙØ³Ùا.
ÙØ§ ÙØ³ØªØ¹Ù
Ù Ø§ÙØªØ¹Ø§Ùد Ù٠آخر سطر Ù
Ù âfâ.
ÙØ°Ø§ Ø´ÙÙ Ø§ÙØªØ¹Ø§Ùد:
function f(b) {
currentSum += b;
return f(); // <-- استدعاء ØªØ¹Ø§ÙØ¯Ù
}
بÙÙ٠ا ÙÙ ØØ§ÙØªÙØ§ ÙÙØ¹Ùد Ø§ÙØ¯Ø§ÙØ© دÙÙ Ø§Ø³ØªØ¯Ø¹Ø§Ø¦ÙØ§:
function f(b) {
currentSum += b;
return f; // <-- ÙØ§ تستدع٠ÙÙØ³ÙØ§Ø Ø¨Ù ØªÙØ¹Ùد ÙÙØ³Ùا
}
ÙØ³ØªÙستعÙ
Ù âfâ ÙØ°Ù ÙÙ Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡ Ø§ÙØªØ§ÙÙØ ÙØªÙØ¹ÙØ¯ ÙÙØ³Ùا ثاÙÙØ©Ù Ù
ÙÙ
ا ÙØ²Ù
. ÙØ¨Ø¹Ø¯Ùا ØÙÙ ÙØ³ØªØ¹Ù
Ù Ø§ÙØ¹Ø¯Ø¯ Ø£Ù Ø§ÙØ³ÙØ³ÙØ© اÙÙØµÙØ©Ø ÙÙØ¹Ùد Ø§ÙØªØ§Ø¨Ùع âtoStringâ Ø§ÙÙ
جÙ
ÙØ¹ âcurrentSumâ. ÙÙ
ÙÙ Ø£ÙØ¶Ùا Ø£Ù ÙØ³ØªØ¹Ù
Ù âSymbol.toPrimitiveâ Ø£Ù âvalueOfâ ÙØ¥Ø¬Ø±Ø§Ø¡ عÙ
ÙÙØ© Ø§ÙØªØÙÙÙ.
ترج٠ة -ÙØ¨ØªØµØ±Ù- ÙÙÙØµÙ Function object, NFE Ù Ù ÙØªØ§Ø¨ The JavaScript language