Files
freeCodeCamp/curriculum/challenges/arabic/02-javascript-algorithms-and-data-structures/functional-programming/avoid-mutations-and-side-effects-using-functional-programming.md
2022-12-15 14:51:02 +00:00

3.1 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d7b8e367417b2b2512b5e تجنب التحولات والآثار الجانبية باستخدام البرمجة الوظيفية Functional Programming 1 301228 avoid-mutations-and-side-effects-using-functional-programming

--description--

إذا لم تكتشف ذلك سلفًا، المشكلة في التحدي السابق كانت مع استدعاء splice في وظيفة tabClose(). لسوء الحظ، يغير splice القائمة (array) الأصلية عند تفعيل الوظيفة، لذا ففي التفعيل الثاني لها استخدمت القائمة (array) المعدلة، وأعطت نتائج غير متوقعة.

هذا مثال صغير لنمط أكبر بكثير- يمكنك تفعيل وظيفة (function) للتأثير على متغير (variable)، أو قائمة (array)، أو كائن(object)، وتغير الوظيفة المتغير أو شيء ما في الكائن.

وأحد المبادئ الأساسية للبرمجة الوظيفية هو عدم تغيير الأشياء. التغييرات تؤدي إلى أعطال. من الأسهل منع الأعطال علما بأن وظائفك (functions) لا تغير أي شيء، بما في ذلك وسائط (arguments) الوظيفة أو أي متغير (variable) عام.

المثال السابق لم يكن به أي عمليات معقدة ولكن طريقة (method) مسمى splice غيرت القائمة (array) الأصلية، وأسفرت عن حدوث خطأ.

تذكر أنه في البرمجة الوظيفية، تغيير الأشياء يسمى طفرة mutation، وتسمى النتيجة تأثير جانبي side effect. من الناحية المثالية، يجب أن تكون الوظيفة خالصة (pure function)، مما يعني أنها لا تسبب أي تأثيرات جانبية.

حاول أن تتقن هذا النظام وألا تغير أي متغير أو كائن في التعليمات البرمجية.

--instructions--

اكتب الكود للوظيفة incrementer حتي تنتج قيمة المتغير العام fixedValue بعد زيادة قيمته بواحد.

--hints--

لا ينبغي للوظيفة (function) مسمى incrementer أن تغير قيمة fixedValue (التي هي 4).

incrementer();
assert(fixedValue === 4);

يجب أن تنتج الوظيفة incrementer قيمة أكبر من fixedValue بواحد.

const __newValue = incrementer();
assert(__newValue === 5);

يجب أن تنتج الوظيفة incrementer قيمة استناداً إلى قيمة المتغير العام fixedValue.

(function () {
  fixedValue = 10;
  const newValue = incrementer();
  assert(fixedValue === 10 && newValue === 11);
  fixedValue = 4;
})();

--seed--

--seed-contents--

// The global variable
let fixedValue = 4;

function incrementer() {
  // Only change code below this line


  // Only change code above this line
}

--solutions--

let fixedValue = 4

function incrementer() {
  return fixedValue + 1
}