Objek di Kotlin

1. Pengenalan

Kotlin meminjam banyak idea dari bahasa lain; salah satu konstruk tersebut adalah objek.

Dalam artikel ringkas ini, kita akan melihat objek apa dan bagaimana penggunaannya.

2. Objek di Kotlin

Di Kotlin, seperti dalam hampir semua bahasa JVM, ada konsep kelas sebagai inti dari model Pengaturcaraan Berorientasikan Objek. Kotlin memperkenalkan konsep objek di atasnya.

Manakala kelas menerangkan struktur yang boleh instantiated apabila dikehendaki dan membolehkan untuk seberapa banyak contoh seperti yang diperlukan, yang objek dan bukannya mewakili contoh statik tunggal , dan tidak boleh mempunyai apa-apa lagi atau apa-apa kurang daripada satu kejadian ini.

Ini berguna untuk pelbagai teknik, termasuk objek tunggal dan fungsi pembungkusan 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 sokongan penuh untuk pengubah penglihatan , yang memungkinkan untuk penyembunyian data dan enkapsulasi seperti kelas lain:

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

Di samping itu, objek dapat melanjutkan kelas dan melaksanakan antara muka . Dengan berbuat demikian, mereka adalah contoh tunggal kelas induk secara efektif, persis seperti yang diharapkan.

Ini sangat berguna untuk kes-kes di mana kita memiliki implementasi tanpa status dan tidak perlu membuat contoh baru setiap masa - misalnya Perbandingan

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. Apakah Objek Pengiring?

Objek pendamping pada dasarnya sama dengan definisi objek standard , hanya dengan beberapa ciri tambahan untuk memudahkan pembangunan.

Objek pendamping selalu dinyatakan di dalam kelas lain. Walaupun dapat memiliki nama, tidak perlu memiliki nama , dalam hal ini secara otomatis memiliki nama Companion :

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

Objek pendamping membolehkan anggotanya diakses dari dalam kelas pendamping tanpa menyatakan namanya .

Pada masa yang sama, ahli yang dapat dilihat dapat diakses dari luar kelas apabila 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. Medan Statik

Penggunaan utama untuk objek pendamping adalah untuk menggantikan medan / kaedah statik yang diketahui dari Java . Namun, bidang ini tidak dihasilkan secara automatik dalam fail kelas yang dihasilkan.

Sekiranya kita memerlukannya dihasilkan, kita perlu menggunakan anotasi @JvmStatic di lapangan sebagai gantinya, yang kemudian akan menghasilkan bytecode seperti yang diharapkan:

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

Tanpa melakukan ini, bidang staticField tidak mudah diakses dari kod Java.

Menambah anotasi ini menghasilkan medan persis seperti yang diperlukan untuk medan statik standard, memungkinkan untuk saling beroperasi sepenuhnya dari Java jika perlu .

Ini bermaksud bahawa di atas menghasilkan kaedah statik getStaticField () pada kelas StaticClass .

5. Kesimpulan

Objek di Kotlin menambah lapisan tambahan yang dapat kita gunakan, memperkemas kod kita lebih jauh dan membuatnya lebih mudah dikembangkan.

Objek pendamping kemudian mengambilnya lebih jauh, yang membolehkan kod yang lebih mudah dijaga dan dikerjakan.

Seperti biasa, coretan kod boleh didapati berulang-ulang di GitHub.