Lebihan Operator Kotlin (Dengan Contoh)

Isi kandungan

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+bberubah 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 operatorkata kunci untuk memberitahu pengkompil bahawa +pengendali sedang berlebihan.

Ungkapan p1 + p2berubah menjadi p1.plus(p2)di bawah tudung.

Contoh: - Pengendalian berlebihan

Dalam contoh ini, anda akan belajar membebani --operator. Ungkapan --aberubah 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.

Artikel menarik...