Saya bertanya pada diri sendiri mengapa Kotlin menggunakan objek pendamping alih-alih metode dan bidang statis? Apakah ini pengurangan boilerplate? Saya pikir lebih mudah untuk menulis objek pendamping dengan semua properti dan fungsi di dalam kurung kurawal daripada menulis statis setiap saat. Berikut adalah contoh.

class Hero {
    companion object {
        private var numberOfHeroes = 0

        fun addNewHero() {
            numberOfHeroes++
        }

        fun deleteHero() {
            numberOfHeroes--
        }

        fun getAllHeroes(): Int {
            return numberOfHeroes
        }
    }

    init {
        addNewHero()
    }
}

fun main() {

    val h1 = Hero()
    val h2 = Hero()

    print("Number of heros: ${Hero.getAllHeroes()}") // result is 2
}

Tapi apakah ini satu-satunya keuntungan? Saya tahu kekompakan sangat penting bagi Kotlin, tetapi saya pikir akan ada sedikit lagi.

0
Torben G 10 Maret 2020, 19:49

1 menjawab

Jawaban Terbaik

Tidak ada manfaat (atau kerugian, dalam hal ini) untuk melakukan satu atau yang lain. Itu hanya konstruksi bahasa. Dan, sejujurnya, Anda harus bertanya apa manfaat objek pendamping dan fungsi ekstensi vs metode statis.

Java dan sebagian besar bahasa OO lainnya memilih untuk menggunakan bidang statis untuk kasus-kasus ketika hanya ada satu contoh bidang yang ada, dan metode statis untuk kasus-kasus ketika a) contoh kelas tidak penting atau tidak penting, atau b) sebenarnya agak seperti itu, tetapi pengembang yang menulis metode statis tidak mengendalikan kelas, yaitu pengguna ingin memperluas fungsionalitas kelas yang ada, di mana dia bukan penulis aslinya (berikan fungsi utilitas sehingga berbicara).

Contoh yang terakhir adalah metode utilitas untuk kelas String yang memeriksa apakah string yang dimaksud kosong (hanya terdiri dari spasi atau kosong). Kelas String tidak dapat diubah secara langsung oleh pengguna akhir, sehingga muncul kebutuhan untuk menulis kelas utilitas dengan metode statis. Tugas ini diselesaikan dengan sempurna di Kotlin menggunakan fungsi ekstensi dan/atau properti.

1
ysakhno 10 Maret 2020, 21:41