Dalam bahasa Swift, untuk menginisialisasi instance, kita harus mengisi semua bidang kelas itu, dan baru kemudian memanggil superconstructor:
class Base {
var name: String
init(name: String) {
self.name = name
}
}
class Derived: Base {
var number: Int
init(name: String, number: Int) {
// won't compile if interchange lines
self.number = number
super.init(name)
}
}
Bagi saya sepertinya mundur, karena instance self
harus dibuat sebelum memberikan nilai ke bidangnya, dan kode itu memberi kesan seolah-olah rantai hanya terjadi setelah penugasan. Selain itu, superclass tidak memiliki sarana hukum untuk membaca atribut yang diperkenalkan subkelasnya, sehingga keselamatan tidak diperhitungkan dalam kasus ini.
Juga, banyak bahasa lain, seperti JavaScript, dan bahkan Objective C, yang merupakan nenek moyang spiritual Swift, membutuhkan panggilan berantai sebelum mengakses self
, bukan setelahnya.
Apa alasan di balik pilihan ini untuk mengharuskan bidang harus didefinisikan sebelum memanggil superconstructor?
self
.