الدرس 7 من 8

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

هدف الدرس

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

01

الشرح

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

فالسجلّ كومة: قبل كل تغيير تدفع الحالة الحالية إلى past، وعند التراجع تسحب آخرها وتعيدها. لا نسخ عميق ولا مقارنة — مراجع فقط.

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

02

المطلوب

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

معايير التصحيح

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

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

5 معايير في بطاقة «المطلوب».