Latihan 1 dari materi Command Pattern di Design Patterns — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi createCommandStack() supaya mengembalikan object dengan tiga method:
execute(cmd): panggil cmd.do(), lalu simpan cmd ke riwayat (sebuah array).
undo(): kalau riwayat kosong, kembalikan false. Kalau gak, ambil command terakhir dengan pop(), panggil undo()-nya, lalu kembalikan true.
size(): kembalikan jumlah command di riwayat.
Variabel counter, dua command (counter += 5 dengan kebalikannya counter -= 5, dan counter *= 2 dengan kebalikannya counter /= 2), dan tiga console.log sudah ada di starter dan tetap. Console harus mencetak tiga baris ini, berurutan:
10
0
false
Yang juga dinilai: satu command yang menambah 5 ke n dijalankan dua kali dengan execute, lalu n + "|" + st.size() + "|" + st.undo() + "|" + n harus menghasilkan 10|2|true|5.
Hint
Riwayat undo adalah tumpukan: tiap command yang dijalankan ditaruh di atas, dan undo selalu mengambil yang paling atas, yaitu yang terakhir dijalankan.
Buat const history = [] di dalam createCommandStack. execute memanggil cmd.do() lalu history.push(cmd). undo mengecek history.length === 0 dulu, lalu history.pop().undo(). size mengembalikan history.length.