splice
في وظيفة tabClose()
. لسوء الحظ ، يغير splice
الصفيف الأصلي الذي يتم استدعاؤه ، لذلك استعملت المكالمة الثانية له مصفوفة معدلة ، وأعطت نتائج غير متوقعة. هذا مثال صغير لنمط أكبر بكثير - تقوم باستدعاء وظيفة على متغير أو صفيف أو كائن ، وتقوم الوظيفة بتغيير المتغير أو شيء ما في الكائن. أحد المبادئ الأساسية للبرمجة الوظيفية هو عدم تغيير الأشياء. التغييرات تؤدي إلى البق. من السهل منع الأخطاء مع العلم أن وظائفك لا تغير أي شيء ، بما في ذلك وسائط الدالة أو أي متغير عالمي. لم يكن للمثال السابق أي عمليات معقدة ولكن طريقة splice
غيرت الصفيف الأصلي ، وأدت إلى خلل. أذكر أنه في البرمجة الوظيفية ، وتغيير أو تغيير الأمور يسمى mutation
، ويسمى النتيجة side effect
. من الناحية المثالية ، ينبغي أن تكون pure function
، بمعنى أنها لا تسبب أي آثار جانبية. دعونا نحاول إتقان هذا الانضباط وعدم تغيير أي متغير أو كائن في الكود. incrementer
بحيث تقوم بإرجاع قيمة المتغير العالمي fixedValue
بنسبة واحد. incrementer
بتغيير قيمة fixedValue
.
testString: 'assert(fixedValue === 4, "Your function incrementer
should not change the value of fixedValue
.");'
- text: يجب أن ترجع الدالة incrementer
الخاص بك قيمة أكبر من قيمة fixedValue
.
testString: 'assert(newValue === 5, "Your incrementer
function should return a value that is one larger than the fixedValue
value.");'
```