Overloading Operator
Overloading operator adalah fitur dalam beberapa bahasa pemrograman yang memungkinkan pengulangan penggunaan operator standar, seperti penambahan (+), pengurangan (-), perkalian (*), dan pembagian (/), untuk bekerja dengan tipe yang ditentukan pengguna. Ini dapat membuat sintaks kode lebih intuitif, dengan memungkinkan operasi pada tipe yang ditentukan pengguna diekspresikan dengan cara yang sama seperti operasi pada tipe primitif.
Dalam Cairo, overloading operator dicapai melalui implementasi trait tertentu. Setiap operator memiliki trait terkait, dan pengulangan operator melibatkan penyediaan implementasi trait tersebut untuk tipe kustom. Namun, penting untuk menggunakan overloading operator secara bijak. Penyalahgunaan dapat menyebabkan kebingungan, membuat kode lebih sulit dipelihara, misalnya ketika tidak ada makna semantik pada operator yang di-overload.
Pertimbangkan contoh di mana dua Potion
perlu digabungkan. Potion
memiliki dua bidang data, yaitu mana dan kesehatan. Menggabungkan dua Potion
seharusnya menambahkan bidang-bidang mereka masing-masing.
{{#include ../listings/ch11-advanced-features/no_listing_01_potions/src/lib.cairo}}
Dalam kode di atas, kita mengimplementasikan trait Add
untuk tipe Potion
. Fungsi add mengambil dua argumen: lhs
dan rhs
(kiri dan kanan). Isi fungsi mengembalikan instance Potion
baru, dengan nilai bidangnya merupakan kombinasi dari lhs
dan rhs
.
Seperti yang diilustrasikan dalam contoh tersebut, pengulangan operator memerlukan spesifikasi tipe konkret yang di-overload. Trait generik yang di-overload adalah Add<T>
, dan kita mendefinisikan implementasi konkret untuk tipe Potion
dengan Add<Potion>
.