JavaScript - Polymorphism
Hai there, bakal-bakal ahli JavaScript! Hari ini, kita akan memulakan sebuah perjalanan yang menarik ke dalam dunia polimorfisme dalam JavaScript. Jangan bimbang jika kata itu mendengarkan menakutkan - menjelang akhir pelajaran ini, anda akan menjalankan polimorfisme seperti seorang pro!
Polimorfisme dalam JavaScript
Mari kita mulakan dengan dasar. Polimorfisme adalah kata yang keren yang berasal dari Yunani, berarti "bentuk banyak." Dalam pengkomputeran, ia merujuk kepada kemampuan objek untuk mengambil bentuk atau tingkah laku yang berbeza. Ber fikir tentang ia seperti seekor kameleon yang mengubah warnanya untuk menyesuaikan diri dengan persekitaran yang berbeza.
Dalam JavaScript, polimorfisme membolehkan kita menggunakan satu antara muka untuk mewakili jenis objek yang berbeza. Ia seperti mempunyai remote univers yang boleh mengendalikan pelbagai peranti - TV anda, pemain DVD, dan sistem bunyi - semua dengan tombol yang sama.
Ini adalah contoh mudah untuk mengilustrasikan konsep ini:
function makeSound(animal) {
console.log(animal.sound());
}
let dog = {
sound: function() {
return "Woof!";
}
};
let cat = {
sound: function() {
return "Meow!";
}
};
makeSound(dog); // Output: Woof!
makeSound(cat); // Output: Meow!
Dalam contoh ini, kita ada fungsi makeSound
yang boleh bekerja dengan objek haiwan yang berbeza. Kedua-dua dog
dan cat
ada method sound
, tetapi mereka menghasilkan output yang berbeza. Ini adalah polimorfisme dalam tindakan!
Penimbalan Method
Salah satu aspek utama polimorfisme adalah penimbalan method. Ini berlaku apabila kelas anak memberikan implementasi khusus untuk method yang sudah ditakrifkan dalam kelas induknya.
Mari kita lihat contoh ini:
class Animal {
makeSound() {
return "Haiwan membuat bunyi";
}
}
class Dog extends Animal {
makeSound() {
return "Anjing mengeong";
}
}
class Cat extends Animal {
makeSound() {
return "Kucing meong";
}
}
let animal = new Animal();
let dog = new Dog();
let cat = new Cat();
console.log(animal.makeSound()); // Output: Haiwan membuat bunyi
console.log(dog.makeSound()); // Output: Anjing mengeong
console.log(cat.makeSound()); // Output: Kucing meong
Di sini, kita ada kelas Animal
dengan method makeSound
. Kelas Dog
dan Cat
menyertai Animal
dan menimbal method makeSound
dengan implementasi mereka sendiri. Ini membolehkan setiap haiwan untuk mempunyai bunyi yang unik manakala masih menjadi sebahagian daripada keluarga Animal
.
Contoh
Mari kita masuk lebih mendalam dengan lebih banyak contoh untuk memperkukuh pengetahuan kita tentang polimorfisme dalam JavaScript.
Contoh 1: Kalkulator Bentuk
Imaginasi kita sedang membina kalkulator bentuk. Kita mahu mengira luas bentuk yang berbeza menggunakan nama method yang sama.
class Shape {
calculateArea() {
return 0;
}
}
class Circle extends Shape {
constructor(radius) {
super();
this.radius = radius;
}
calculateArea() {
return Math.PI * this.radius * this.radius;
}
}
class Rectangle extends Shape {
constructor(width, height) {
super();
this.width = width;
this.height = height;
}
calculateArea() {
return this.width * this.height;
}
}
function printArea(shape) {
console.log("Luasnya adalah: " + shape.calculateArea());
}
let circle = new Circle(5);
let rectangle = new Rectangle(4, 6);
printArea(circle); // Output: Luasnya adalah: 78.53981633974483
printArea(rectangle); // Output: Luasnya adalah: 24
Dalam contoh ini, kita ada kelas dasar Shape
dan dua kelas turunan, Circle
dan Rectangle
. Setiap kelas mengimplementasikan method calculateArea
mereka sendiri. Fungsi printArea
boleh bekerja dengan mana-mana objek bentuk, menunjukkan polimorfisme.
Contoh 2: Sistem Payroll Pekerja
Mari kita buat sistem payroll pekerja mudah untuk mengilustrasikan polimorfisme lebih lanjut:
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
calculateBonus() {
return this.salary * 0.1;
}
}
class Manager extends Employee {
calculateBonus() {
return this.salary * 0.2;
}
}
class Developer extends Employee {
calculateBonus() {
return this.salary * 0.15;
}
}
function printBonus(employee) {
console.log(`${employee.name} bonus adalah: $${employee.calculateBonus()}`);
}
let john = new Employee("John", 50000);
let jane = new Manager("Jane", 70000);
let bob = new Developer("Bob", 60000);
printBonus(john); // Output: John bonus adalah: $5000
printBonus(jane); // Output: Jane bonus adalah: $14000
printBonus(bob); // Output: Bob bonus adalah: $9000
Dalam contoh ini, kita ada jenis pekerja yang berbeza dengan peraturan kira bonus yang berbeza. Fungsi printBonus
boleh bekerja dengan mana-mana objek pekerja, menunjukkan polimorfisme.
Manfaat Menggunakan Polimorfisme dalam JavaScript
Sekarang kita telah melihat polimorfisme dalam tindakan, mari kita berbicara tentang mengapa ia begitu menakjubkan:
-
Keserasian Kod: Polimorfisme membolehkan kita menulis kod yang lebih generik dan boleh digunakan semula. Fungsi
printArea
danprintBonus
kita boleh bekerja dengan mana-mana objek bentuk atau objek pekerja, masing-masing. -
Keserasian: Ia lebih mudah untuk menambah jenis objek baru tanpa mengubah kod yang ada. Kita boleh menambah kelas
Triangle
ke kalkulator bentuk kita tanpa mengubah fungsiprintArea
. -
Kemudahan Penyelenggaraan: Polimorfisme boleh membawa kepada kod yang lebih bersih, lebih teratur, dan mudah dipelihara dan diperluas.
-
Abstraksi: Ia membolehkan kita bekerja dengan objek di tahap abstrak tinggi, memfokuskan kepada apa yang objekbuat daripada bagaimana ia melakukannya.
Di sini ada jadual yang menggabungkan method utama yang kita gunakan dalam contoh kita:
Method | Description |
---|---|
calculateArea() |
Mengira luas bentuk |
calculateBonus() |
Mengira bonus pekerja |
makeSound() |
Mengembalikan bunyi haiwan |
sound() |
Mengembalikan bunyi haiwan (dalam contoh object literal) |
Ingat, padawans muda, polimorfisme adalah seperti mempunyai pisau瑞士 Army di dalam kotak alat pengkomputeran anda. Ia universal, kuat, dan boleh membuat kod anda lebih indah dan efisien. Terus berlatih, dan segera anda akan menjadi ahli JavaScript dengan polimorfisme!
Credits: Image by storyset