Saya baru saja membaca tentang const
kata kunci, dan saya sangat bingung! Saya tidak dapat menemukan perbedaan antara const
dan val
kata kunci, maksud saya kita dapat menggunakan keduanya untuk membuat variabel yang tidak dapat diubah, apakah ada hal lain yang saya lewatkan?
276
Jawaban:
const
s adalah konstanta waktu kompilasi. Berarti bahwa nilai mereka harus ditetapkan selama waktu kompilasi, tidak sepertival
s, di mana itu dapat dilakukan saat runtime.Ini berarti, bahwa
const
s tidak pernah dapat ditugaskan ke fungsi atau konstruktor kelas, tetapi hanya untukString
atau primitif.Sebagai contoh:
sumber
const val foo = "Hello world"
danval bar = "Hello world"
? Apakah mereka sama?const
nilai-nilai hanya akan sepenuhnya diuraikan selama kompilasi.const val
alih-alih adilconst
? Menurut saya,val
kata kunci tersebut benar-benar berlebihan dalam konteks ini, karenaconst var
akan absurd di wajahnya.const val
,const
adalah pengubahval
daripada kata kunci. Pengubah> kata kunci. Lebih banyak contoh desain yang sama ini,annotation/enum/data class
,private val
,inline fun
, dllHanya untuk menambah jawaban Luka:
Sumber: Dokumentasi resmi
sumber
Anda dapat mengubah Kotlin ke Jawa. Maka Anda dapat melihat const memiliki satu lagi pengubah statis daripada val . Kode sederhana seperti ini.
Kotlin:
Ke Jawa (Bagian):
sumber
const
dihapus, apakah akan menghasilkan file Java yang berbeda?Keduanya
val
danconst
tidak berubah.const
digunakan untuk mendeklarasikan konstanta waktu kompilasi, sedangkanval
untuk konstanta run-time.sumber
const kotlin ke Jawa
val kotlin ke Jawa
Dalam Bahasa sederhana
Contoh 1-
Ini karena getCar () dievaluasi pada waktu berjalan dan memberikan nilai ke Car.
Selain itu -
sumber
Di kotlin,
const
danval
keduanya mewakili ketidakmampuan dan hanya membaca nilai dan bertindak sebagaifinal
kata kunci dalam java.val
kata kunci harus digunakan untuk menyatakan nilai run time danconst
kata kunci harus digunakan untuk menyatakan nilai waktu kompilasi.Perlu diingat, const harus digunakan hanya dengan tipe data primitif bukan untuk fungsi dan konstruktor.
sumber