الدرس 7 من 8

التراجع خطوة خطوة

هدف الدرس

سجلّ من لقطات لا تتغيّر

01

الشرح

يبدو التراجع ميزة معقّدة، لكنه نتيجة مباشرة لدرس «لا تعدّل بل أنشئ نسخة جديدة»، فإن كان كل تغيير يُنتج مصفوفة جديدة ولا يمسّ القديمة، بقيت القديمة لقطة سليمة تعود إليها متى شئت.

والسجلّ هنا مكدّس (stack)، فقبل كل تغيير تضيف الحالة الحالية إلى past، وعند التراجع تسحب آخر ما أضفته وتعيده، ولا تحتاج إلى نسخ عميق ولا إلى مقارنة، لأنك تحفظ مراجع فقط.

والفخّ أن تعدّل الحالة في مكانها بـ push أو splice، فحينها يصير كل ما في المكدّس مرجعًا للمصفوفة نفسها، فيتغيّر «الماضي» مع الحاضر ولا يبقى شيء تعود إليه.

02

المطلوب

أكمل commit(next) لتضيف state.items إلى past ثم تضع next مكانها وتعيد الرسم، وأكمل undo() لتعيد آخر لقطة من past، واجعل render() يعطّل #undo حين تكون past فارغة.

الفحوص

5 فحوص
  1. زرّ التراجع يتبع السجلّ فيُعطَّل ثم يُفعَّل ثم يُعطَّل
  2. التراجع يُلغي الإضافة
  3. التراجع يُلغي الحذف أيضًا
  4. تراجعان متتاليان يعودان خطوة خطوة
  5. اللقطة المستعادة هي المصفوفة نفسها لا نسخة منها
03

تلميحات

0/3
index.html
المعاينة
index.html100%
–/5

اضغط «تشغيل وتصحيح» ليبدأ الفحص.

تجد 5 فحوص في بطاقة «المطلوب».