ProgramlamaAndroid geliştirici / Backend geliştirici

Sabit değerlerin (const val) ve derleme zamanındaki sabitlerin Kotlin'de nasıl çalıştığı, normal val'den ne farkı olduğu, sınırlamaların neler olduğu, nasıl anotasyonlarda kullanıldığı ve neden her yerde const val kullanmanın mümkün olmadığıyla ilgili sorular.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Kotlin'de const val anahtar kelimesi, derleme zamanındaki sabitleri tanımlamak için kullanılır, yani derleme aşamasında bilinen ve hesaplanan değerlerdir.

  • const val yalnızca üst düzey değişkenler veya object nesneleri veya companion object tarafından tanımlanan özellikler için kullanılır.
  • Değer String, sayısal ilkel veya Boolean türünde olmalıdır.
  • Anotasyonlar ve dekoratörlerde, değerlerin derleme zamanında yerleştirilmesi gereken yerlerde kullanılır.

val ise değiştirilemeyen bir değişkendir, ancak değeri çalışma zamanında atanabilir; bu da başlatma sırasında hesaplamalara veya fonksiyon çağrılarına izin verir:

val timestamp = System.currentTimeMillis() // Bu bir const val DEĞİLDİR const val APP_NAME = "MyApp" // Bu bir derleme zamanı sabitidir

Anotasyonlarda yalnızca const val kullanılabilir, örnek:

const val AUTHOR = "John Doe" @Target(AnnotationTarget.CLASS) annotation class Author(val name: String) @Author(AUTHOR) class Example

Böyle durumlarda val kullanmaya çalışmak derleme hatasına yol açar.


Cevap olarak belirsiz soru

Neden const val normal bir sınıf içinde tanımlanamaz?

Cevap: Çünkü const val değişkenin derleme zamanı erişilebilirliğini gerektirir, ancak sınıf örneği değişkenleri yalnızca nesne oluşturulurken başlatıldığı için derleme zamanı sabitleri olamazlar.

class Example { // Hata! Bu şekilde olamaz // const val CLASS_NAME = "MyClass" }

Tarih

Derleyici bozuldu çünkü bir geliştirici derleme zamanında hesaplanan bir değeri anotasyonla geçmeye çalıştı.

Geliştirici şöyle tanımladı:

val version = getVersionFromConfig() @Target(AnnotationTarget.CLASS) annotation class Version(val value: String) @Version(version) class App

Proje derlenmedi çünkü yalnızca const val anotasyon argümanlarında kullanılabilir!


Tarih

Android'de hata: Niyet içinde sabit anahtarlar olarak yerel değişkenleri kullanma girişimi.

class Keys { companion object { val EXTRA_USER_ID = "userId" } } intent.putExtra(Keys.EXTRA_USER_ID, userId)

Bazı araçlar veya çerçeveler, const val bekler, normal val değil — aksi takdirde IDE veya Android kaynakları bu değerleri derleme zamanı sabitleri olarak göremez.


Tarih

const val için uygun olmayan bir tür kullanımı.

const val LIST = listOf(1,2,3) // Hata! Sadece ilkel türler ve String.

Tür sınırlamalarının bilinmemesi derleme hatasına neden oldu ve zaman kaybına yol açtı.