Latihan 1: Visitor Pattern — Design Patterns

Latihan 1 dari materi Visitor Pattern di Design Patterns — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Starter sudah berisi pohon tree untuk (1 + 2) * 3, visitor depth, dan empat console.log. Semuanya tetap. Lengkapi tiga function:

  1. accept(node, visitor): kalau node.type adalah "num", kembalikan visitor.visitNum(node). Kalau "bin", kembalikan visitor.visitBin(node).
  2. createEvaluator(): kembalikan object dengan visitNum(n) yang mengembalikan n.value, dan visitBin(n) yang menghitung accept(n.left, this) dan accept(n.right, this), lalu menjumlahkannya untuk op "+" atau mengalikannya untuk op "*".
  3. createPrinter(): kembalikan object dengan visitNum(n) yang mengembalikan String(n.value), dan visitBin(n) yang mengembalikan "(" + kiri + " " + n.op + " " + kanan + ")", dengan kiri dan kanan dari accept.

Tulis visitBin sebagai method biasa, bukan arrow function, supaya this adalah visitor-nya. Console harus mencetak empat baris ini, berurutan:

  1. 9
  2. ((1 + 2) * 3)
  3. 3
  4. 1

Yang juga dinilai: accept dengan evaluator di pohon 3 * 4 ({ type: "bin", op: "*", left: { type: "num", value: 3 }, right: { type: "num", value: 4 } }) harus mengembalikan 12.

Hint