Kotlin'de visibility modifikatörleri, sınıflar, özellikler, fonksiyonlar ve üst düzey (dosya seviyesinde) varlıklar gibi bildirimlerin erişimlerini kontrol etmeyi sağlar. Java'dan farklı olarak, modifikatörler yalnızca sınıf düzeyinde geçerli iken, Kotlin'de üst düzey bildirimlerde de çalışır, bu da büyük projelerin ve kütüphane API'lerinin yapılandırılması için önemlidir.
Java'da, sınıf dışında fonksiyonlar veya özellikler için visibility modifikatörleri bulunmamaktadır - her şey public (veya package-private) sınıfın içindedir. Kotlin'de, projeyi farklı bir şekilde yapılandırmak yaygındır; sıklıkla bir fonksiyon veya özellik sınıfın içinde değil, doğrudan dosyada bulunur.
Java geliştiricileri genellikle public'in varsayılan olarak Java'daki gibi çalıştığını beklerler, ancak Kotlin'de üst düzey fonksiyon (veya özellik), aksi belirtilmediği sürece tüm modüllerde görülebilir. Yanlış bir visibility belirlemesi, kamu API'sinin sözdizimsel kirlenmesine, beklenmeyen iç yardımcı araçların erişilebilirliğine veya gerekli public fonksiyonların erişilemezliğine yol açabilir.
Kotlin'de aşağıdaki modifikatörler kullanılabilir:
Örnek:
// dosya: Foo.kt private fun utilityFun() {} internal val bar: Int = 10 public val baz: Int = 20 // public gerekli değil fun printValue() { println(bar) }
Üst düzey bir fonksiyon için protected kullanılabilir mi?
Hayır, protected yalnızca sınıf/arayüz üyeleri için geçerlidir, üst düzey bu tür öğeleri desteklemez.
Eğer üst düzey bir fonksiyonu internal olarak bildirirsem, diğer modüllerde görünür mü?
Hayır. Yalnızca mevcut jar/Gradle modülü içinde görünür.
private sınıf ile private üst düzey fonksiyon arasındaki fark nedir?
Örnek:
// dosya: Utils.kt private fun helper() { /* ... */ } // yalnızca bu dosyada görünür internal fun useful() { /* ... */ } // modülün tamamında görünür
Test yardımcıları public olarak bildirildiği için artefact'a dahil olurlar ve kütüphane istemcisine engel olurlar - public API ile ilgili olmayan her şey görünür hale gelir.
Artıları:
Eksileri:
İç fonksiyonlar private olarak, modül içinde ortak kullanım için internal görünürlüğe sahip yardımcılar, yalnızca dikkatlice düşünülmüş arayüzler public erişime sahiptir.
Artıları:
Eksileri: