Dalam artikel ini, anda akan belajar mengenai beban operator yang berlebihan (tentukan bagaimana operator berfungsi untuk jenis yang ditentukan pengguna seperti objek) dengan bantuan contoh.
Apabila anda menggunakan operator di Kotlin, fungsi anggota yang sesuai dipanggil. Sebagai contoh, ungkapan a+b
berubah menjadi a.plus(b)
bawah tudung.
fun main(args: Array) ( val a = 5 val b = 10 print(a.plus(b)) // print(a+b) )
Semasa anda menjalankan program, outputnya adalah:
15
Sebenarnya, plus()
fungsi terlalu banyak untuk berfungsi dengan pelbagai jenis asas Kotlin dan String
.
// + operator untuk jenis asas keseronokan operator ditambah (lain-lain: Byte): Keseronokan pengendali int plus (lain: Pendek): Keseronokan pengendali int plus (lain: Int): Keseronokan pengendali int plus (lain: Panjang): Keseronokan pengendali panjang plus (lain-lain: Float): Float operator fun plus (other: Double): Double // for string concatenation operator String? .plus (other: Any?): String
Anda juga boleh menentukan cara pengendali berfungsi untuk objek dengan memuatkan fungsi yang sesuai. Sebagai contoh, anda perlu menentukan cara +
pengendali berfungsi untuk objek dengan plus()
fungsi pemuatan berlebihan .
Contoh: Pengendalian berlebihan + 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) ) )
Semasa anda menjalankan program, outputnya adalah:
jumlah = (5, 1)
Di sini, plus()
fungsi tersebut ditandai dengan operator
kata kunci untuk memberitahu pengkompil bahawa +
pengendali sedang berlebihan.
Ungkapan p1 + p2
berubah menjadi p1.plus(p2)
di bawah tudung.
Contoh: - Pengendalian berlebihan
Dalam contoh ini, anda akan belajar membebani --
operator. Ungkapan --a
berubah menjadi a.dec()
di bawah tudung.
Yang dec()
fungsi ahli tidak mengambil apa-apa hujah.
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) )
Semasa anda menjalankan program, ouput akan menjadi:
titik = (2, -9)
Ingat itu,
keseronokan operator dec () = Titik (- x, --y)
adalah bersamaan dengan
keseronokan operator dec (): Titik (Titik kembali (- x, --y))
Beberapa Perkara Penting
1. Apabila anda membebani operator, anda harus berusaha mengekalkan semangat pengendali yang asal. 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) )
Walaupun program di atas betul secara teknikal, kami telah menggunakan +
operator untuk mengurangkan sifat-sifat yang sesuai dari dua objek yang membuat program membingungkan.
2. Tidak seperti bahasa seperti Scala, hanya sekumpulan operator tertentu yang boleh dibebani berlebihan di Kotlin. Lawati halaman untuk mengetahui tentang pengendali yang boleh memuatkan lebih banyak di Kotlin dan fungsi anggota yang sesuai.