Buat sebuah kalkulator yang bisa diperluas
Buat sebuah konstructor fungsi Calculator
yang membuat objek kalkulator “yang dapat diperluas”.
Tugasnya terdiri dari dua bagian.
-
Pertama, implementasikan method
calculate(str)
yang menerima sebuah string sepertin"1 + 2"
didalam format “ANGKA operator ANGKA” (membatasi ruang) dan mengembalikan hasilnya. Harus mengerti tambah+
dan kurang-
.Contoh penggunaan:
let calc = new Calculator; alert( calc.calculate("3 + 7") ); // 10
-
Lalu tambahkan method
addMethod(name, func)
yang mengajarkan operator operasi baru. methodnya akan menerimaname
dan fungsi dengan dua-argumenfunc(a, b)
yang mengimplementasikannya.Contoh, kita tambah perkalian
*
, pembagian/
dan pangkat**
:let powerCalc = new Calculator; powerCalc.addMethod("*", (a, b) => a * b); powerCalc.addMethod("/", (a, b) => a / b); powerCalc.addMethod("**", (a, b) => a ** b); let result = powerCalc.calculate("2 ** 3"); alert( result ); // 8
- Tidak ada tanda kurung atau ekspresi yang rumit didalam tugas ini.
- Angka dan operatornya dibatasi dengan hanya satu spasi.
- Disana mungkin terdapat penanganan error jika kamu ingin menambahkannya.
- Tolong perhatikan bagaimana method disimpan. Mereka secara sederhana ditambahkan kedalam properti
this.methods
. - Semua test dan perubahan numerik dilakukan didalam method
calculate
. Selanjutnya mungkin bisa diperluas untuk mendukung lebih banyak ekspresi yang rumit.
function Calculator() {
this.methods = {
"-": (a, b) => a - b,
"+": (a, b) => a + b
};
this.calculate = function(str) {
let split = str.split(' '),
a = +split[0],
op = split[1],
b = +split[2];
if (!this.methods[op] || isNaN(a) || isNaN(b)) {
return NaN;
}
return this.methods[op](a, b);
};
this.addMethod = function(name, func) {
this.methods[name] = func;
};
}