TypeScript - Duck Typing: A Beginner's Guide

Hai there, bakat pemrograman masa depan! Hari ini, kita akan menyelam ke dalam dunia yang menakjubkan TypeScript dan menjelajahi konsep yang menyenangkan seperti yang terdengar - Duck Typing. Jangan khawatir jika Anda baru dalam pemrograman; saya akan memandu Anda dalam perjalanan ini langkah demi langkah, seperti yang saya lakukan untuk ribuan murid selama tahun-tahun mengajar saya. Jadi, mari kita mulai!

TypeScript - Duck-Typing

Apa Itu Duck Typing?

Bayangkan Anda di sebuah kolam, dan Anda melihat seekor burung berenang. Itu tampak seperti bebek, berbisik seperti bebek, dan berenang seperti bebek. Anda akan menyebutnya apa? Bebek, kan? Itu esensi Duck Typing dalam pemrograman!

Duck Typing adalah konsep yang mengatakan, "Jika dia berjalan seperti bebek dan berbisik seperti bebek, maka dia pasti bebek." Dalam istilah pemrograman, itu berarti jenis atau kelas objek kurang penting daripada metode yang ditentukan atau propertinya.

Biarkan saya berbagi cerita kecil dari hari-hari mengajar saya. Pernah saya memiliki murid yang kesulitan memahami jenis dalam pemrograman. Saya meminta dia untuk berpikir tentang kasusnya sendiri. Tidak penting jika itu terbuat dari plastik, logam, atau kain - selama bisa menampung pensil dan penggarisnya, itu melakukan tugasnya sebagai kasus pensil. Itu adalah contoh Duck Typing dalam aksi!

Bagaimana Duck Typing Bekerja di TypeScript

Dalam TypeScript, Duck Typing memungkinkan kita untuk menggunakan objek sebagai jika itu adalah jenis tertentu, selama itu memiliki semua properti dan metode yang diperlukan jenis itu. Itu seperti mengatakan, "Jika memiliki semua fitur yang saya butuhkan, saya tidak peduli apa namanya!"

mari kita lihat contoh sederhana:

interface Quackable {
quack(): void;
}

function makeItQuack(duck: Quackable) {
duck.quack();
}

let rubberDuck = {
quack: () => console.log("Squeak! Squeak!")
};

let realDuck = {
quack: () => console.log("Quack! Quack!"),
swim: () => console.log("Splash! Splash!")
};

makeItQuack(rubberDuck); // Output: Squeak! Squeak!
makeItQuack(realDuck);   // Output: Quack! Quack!

Dalam contoh ini, kita memiliki Quackable interface yang memerlukan metode quack. Fungsi makeItQuack menerima objek apapun yang cocok dengan interface ini. Baik rubberDuck dan realDuck memiliki metode quack, jadi mereka bisa digunakan dengan makeItQuack, meskipun realDuck memiliki metode swim tambahan.

Manfaat Duck Typing

Sekarang kita mengerti apa itu Duck Typing, mari kita jelajahi mengapa itu sangat hebat! Berikut adalah beberapa manfaat utama:

1. Kekalikan

Duck Typing memungkinkan kode yang lebih fleksibel. Anda tidak perlu membuat hierarki kelas yang ketat untuk menggunakan objek dalam cara yang sama. Selama objek memiliki metode atau properti yang diperlukan, itu bisa digunakan secara bergantian.

2. Reusabilitas Kode

Dengan Duck Typing, Anda bisa menulis fungsi yang bekerja dengan berbagai objek, selama mereka memiliki properti atau metode yang diperlukan. Ini mendorong penggunaan ulang kode dan bisa membuat basis kode Anda lebih efisien.

3. Lebih Mudah Dalam Pemeriksaan

Duck Typing membuatnya mudah untuk membuat objek mock untuk pemeriksaan. Anda hanya perlu implementasikan metode yang benar-benar digunakan dalam pemeriksaan, bukan membuat implementasi penuh kelas.

4. Desain Intuitif

Duck Typing seringkali mengarah ke desain API yang intuitif. Anda fokus pada apa yang bisa dilakukan objek, bukan apa labelnya.

Contoh Duck Typing di TypeScript

mari kita masuk ke beberapa contoh lain untuk memperkuat pemahaman kita tentang Duck Typing di TypeScript.

Contoh 1: The Shape-Shifter

interface Drawable {
draw(): void;
}

class Circle {
draw() {
console.log("Drawing a circle");
}
}

class Square {
draw() {
console.log("Drawing a square");
}
}

function drawShape(shape: Drawable) {
shape.draw();
}

drawShape(new Circle()); // Output: Drawing a circle
drawShape(new Square()); // Output: Drawing a square

Dalam contoh ini, Circle dan Square adalah kelas yang berbeda, tapi keduanya memiliki metode draw. Fungsi drawShape tidak peduli tentang jenis khusus objek yang diterima; hanya peduli bahwa objek memiliki metode draw.

Contoh 2: The Noise Makers

interface NoiseMaker {
makeNoise(): string;
}

let dog = {
makeNoise: () => "Woof!"
};

let cat = {
makeNoise: () => "Meow!",
purr: () => "Purr..."
};

let car = {
makeNoise: () => "Vroom!",
drive: () => console.log("Driving...")
};

function makeNoise(thing: NoiseMaker) {
console.log(thing.makeNoise());
}

makeNoise(dog); // Output: Woof!
makeNoise(cat); // Output: Meow!
makeNoise(car); // Output: Vroom!

Di sini, kita memiliki berbagai objek - anjing, kucing, dan bahkan mobil! Mereka semua memiliki metode makeNoise, jadi mereka semua bisa digunakan dengan fungsi makeNoise, meskipun mereka sangat berbeda.

Contoh 3: The Fly-Swimmer

interface Flyable {
fly(): void;
}

interface Swimmable {
swim(): void;
}

class Duck implements Flyable, Swimmable {
fly() {
console.log("Duck is flying");
}
swim() {
console.log("Duck is swimming");
}
}

class Airplane implements Flyable {
fly() {
console.log("Airplane is flying");
}
}

class Fish implements Swimmable {
swim() {
console.log("Fish is swimming");
}
}

function makeFly(flyer: Flyable) {
flyer.fly();
}

function makeSwim(swimmer: Swimmable) {
swimmer.swim();
}

let duck = new Duck();
let airplane = new Airplane();
let fish = new Fish();

makeFly(duck);     // Output: Duck is flying
makeFly(airplane); // Output: Airplane is flying
makeSwim(duck);    // Output: Duck is swimming
makeSwim(fish);    // Output: Fish is swimming

Dalam contoh ini, kita memiliki kelas yang berbeda mengimplementasikan interface yang berbeda. Kelas Duck mengimplementasikan kedua Flyable dan Swimmable interface, jadi itu bisa digunakan dengan kedua makeFly dan makeSwim fungsi.

Kesimpulan

Dan itu adalah, teman-teman! Kita telah berenang melalui dasar-dasar Duck Typing di TypeScript. Ingat, kata kunci adalah ini: dalam Duck Typing, kita peduli lebih dengan apa yang bisa dilakukan objek (metode dan propertinya) daripada apa jenisnya (kelasnya).

Duck Typing memungkinkan kita menulis kode yang lebih fleksibel, dapat digunakan kembali, dan intuitif. Itu adalah konsep yang kuat yang bisa membuat kode TypeScript Anda lebih elegan dan efisien.

Sekarang Anda teruskan perjalanan pemrograman Anda, cari peluang untuk menerapkan Duck Typing. Dan ingat, jika itu tampak seperti bebek, berenang seperti bebek, dan berbisik seperti bebek, maka itu mungkin adalah bebek... atau setidaknya, itu bisa ditangani seperti satu dalam kode Anda!

Selamat pemrograman, dan semoga kode Anda selalu "quack" ... saya maksud, bekerja sempurna!

Credits: Image by storyset