Objek di Kotlin

1. Perkenalan

Kotlin meminjam banyak ide dari bahasa lain; salah satu konstruksi tersebut adalah objeknya.

Dalam artikel singkat ini, kita akan melihat objek apa dan bagaimana digunakan.

2. Objek di Kotlin

Di Kotlin, seperti di hampir semua bahasa JVM, ada konsep kelas sebagai inti dari model Pemrograman Berorientasi Objek. Kotlin memperkenalkan konsep objek di atas itu.

Sedangkan kelas mendeskripsikan struktur yang dapat dibuat instance-nya sesuai keinginan dan memungkinkan instance sebanyak yang dibutuhkan, sebuah objek malah mewakili satu instance statis , dan tidak pernah dapat memiliki lebih atau kurang dari satu instance ini.

Ini berguna untuk berbagai teknik, termasuk objek tunggal dan fungsionalitas pengemasan sederhana untuk enkapsulasi:

object SimpleSingleton { val answer = 42; fun greet(name: String) = "Hello, $name!" } assertEquals(42, SimpleSingleton.answer) assertEquals("Hello, world!", SimpleSingleton.greet("world"))

Objek juga menawarkan dukungan penuh untuk pengubah visibilitas , memungkinkan penyembunyian data dan enkapsulasi seperti pada kelas lainnya:

object Counter { private var count: Int = 0 fun currentCount() = count fun increment() { ++count } } Counter.increment() println(Counter.currentCount()) println(Counter.count) // this will fail to compile

Selain itu, objek dapat memperluas kelas dan mengimplementasikan antarmuka . Dengan demikian, mereka adalah instance tunggal kelas induk yang efektif, persis seperti yang diharapkan.

Ini bisa sangat berguna untuk kasus-kasus di mana kita memiliki implementasi stateless dan tidak perlu membuat instance baru setiap saat - misalnya Pembanding:

object ReverseStringComparator : Comparator { override fun compare(o1: String, o2: String) = o1.reversed().compareTo(o2.reversed()) } val strings = listOf("Hello", "World") val sortedStrings = strings.sortedWith(ReverseStringComparator)

3. Apa Itu Objek Pendamping?

Objek pendamping pada dasarnya sama dengan definisi objek standar , hanya dengan beberapa fitur tambahan untuk mempermudah pengembangan.

Objek pendamping selalu dideklarasikan di dalam kelas lain. Meskipun dapat memiliki nama, ia tidak perlu memiliki nama , dalam hal ini ia otomatis memiliki nama Pengiring :

class OuterClass { companion object { // Equivalent to "companion object Companion" } }

Objek pendamping memungkinkan anggotanya diakses dari dalam kelas pendamping tanpa menentukan namanya .

Pada saat yang sama, anggota yang terlihat dapat diakses dari luar kelas jika diawali dengan nama kelas:

class OuterClass { companion object { private val secret = "You can't see me" val public = "You can see me" } fun getSecretValue() = secret } assertEquals("You can see me", OuterClass.public) assertEquals("You can't see me", OuterClass.secret) // Cannot access 'secret'

4. Bidang Statis

Penggunaan utama objek pendamping adalah untuk menggantikan bidang / metode statis yang diketahui dari Java . Namun, kolom ini tidak dibuat secara otomatis seperti di file kelas yang dihasilkan.

Jika kita membutuhkannya untuk dibuat, kita perlu menggunakan anotasi @JvmStatic di lapangan, yang kemudian akan menghasilkan bytecode seperti yang diharapkan:

class StaticClass { companion object { @JvmStatic val staticField = 42 } }

Tanpa melakukan ini, bidang statis staticField tidak dapat diakses dengan mudah dari kode Java.

Menambahkan anotasi ini menghasilkan bidang persis seperti yang diperlukan untuk bidang statis standar, memungkinkan interoperabilitas penuh dari Java jika perlu .

Ini berarti cara di atas menghasilkan metode statis getStaticField () pada kelas StaticClass .

5. Kesimpulan

Objek di Kotlin menambahkan seluruh lapisan ekstra yang dapat kita gunakan, semakin menyederhanakan kode kita dan membuatnya lebih mudah untuk dikembangkan.

Objek pendamping kemudian mengambil ini lebih jauh, memungkinkan kode yang lebih bersih yang lebih mudah untuk dipelihara dan digunakan.

Seperti biasa, potongan kode dapat ditemukan di GitHub.