Dalam artikel ini, Anda akan belajar tentang operator overloading (menentukan cara kerja operator untuk tipe yang ditentukan pengguna seperti objek) dengan bantuan contoh.
Saat Anda menggunakan operator di Kotlin, fungsi anggota yang sesuai akan dipanggil. Misalnya, ekspresi a+b
berubah menjadi a.plus(b)
under the hood.
fun main(args: Array) ( val a = 5 val b = 10 print(a.plus(b)) // print(a+b) )
Saat Anda menjalankan program, hasilnya adalah:
15
Faktanya, plus()
fungsi kelebihan beban untuk bekerja dengan berbagai tipe dasar Kotlin dan String
.
// + operator untuk tipe dasar operator menyenangkan plus (lainnya: Byte): Int operator menyenangkan plus (lainnya: Pendek): Int operator menyenangkan plus (lainnya: Int): Int operator menyenangkan plus (lainnya: Panjang): Operator panjang menyenangkan plus (other: Float): Operator float menyenangkan plus (other: Double): Double // untuk kesenangan operator penggabungan string String? .plus (other: Any?): String
Anda juga dapat menentukan cara kerja operator untuk objek dengan membebani fungsi yang sesuai. Misalnya, Anda perlu menentukan cara +
kerja operator untuk objek dengan plus()
fungsi overloading .
Contoh: Overloading + Operator
fun main(args: Array) ( val p1 = Point(3, -8) val p2 = Point(2, 9) var sum = Point() sum = p1 + p2 println("sum = ($(sum.x), $(sum.y))") ) class Point(val x: Int = 0, val y: Int = 10) ( // overloading plus function operator fun plus(p: Point) : Point ( return Point(x + p.x, y + p.y) ) )
Saat Anda menjalankan program, hasilnya adalah:
jumlah = (5, 1)
Di sini, plus()
fungsinya ditandai dengan operator
kata kunci untuk memberi tahu compiler bahwa +
operator sedang kelebihan beban.
Ekspresi p1 + p2
diubah menjadi di p1.plus(p2)
bawah tenda.
Contoh: - Operator Overloading
Dalam contoh ini, Anda akan belajar membebani --
operator. Ekspresi --a
diubah menjadi di a.dec()
bawah tenda.
Fungsi dec()
anggota tidak mengambil argumen apa pun.
fun main(args: Array) ( var point = Point(3, -8) --point println("point = ($(point.x), $(point.y))") ) class Point(var x: Int = 0, var y: Int = 10) ( operator fun dec() = Point(--x, --y) )
Saat Anda menjalankan program, outputnya adalah:
poin = (2, -9)
Ingat itu,
operator menyenangkan dec () = Titik (- x, --y)
setara dengan
operator fun dec (): Point (return Point (- x, --y))
Beberapa Poin Penting
1. Saat Anda membebani operator, Anda harus mencoba mempertahankan semangat asli operator. Sebagai contoh,
fun main(args: Array) ( val p1 = Point(3, -8) val p2 = Point(2, 9) var sum = Point() sum = p1 + p2 println("sum = ($(sum.x), $(sum.y))") ) class Point(val x: Int = 0, val y: Int = 10) ( // overloading plus function operator fun plus(p: Point) = Point(x - p.x, y - p.y) )
Meskipun program di atas secara teknis benar, kami telah menggunakan +
operator untuk mengurangi properti yang sesuai dari dua objek yang membuat program membingungkan.
2. Tidak seperti bahasa seperti Scala, hanya sekumpulan operator tertentu yang dapat kelebihan beban di Kotlin. Kunjungi halaman untuk mempelajari tentang operator yang dapat kelebihan beban di Kotlin dan fungsi anggotanya yang sesuai.