Soru Geçmişi:
Görünürlük değiştiricileri (visibility modifiers) – Kotlin'in Java'dan miras aldığı ve geliştirdiği temel bir özelliktir. Sınıflara, fonksiyonlara ve özelliklere erişimi sınırlamaya olanak tanıyarak kapsülleme ve modülerlik için en iyi uygulamaları destekler.
Sorun:
Yanlış görünürlük kullanımı, mimarinin katmanlarının ihlaline, uygulamanın dışına sızıntıya veya tam tersine, sınıfların ve yöntemlerin ihtiyaç duyulduğunda erişilemez hale gelmesine neden olabilir. Bu hatalar çoğu zaman çok geç fark edilir.
Çözüm:
Kotlin'de dört görünürlük değiştirici vardır:
public — her yerde erişilebilir (varsayılan)internal — yalnızca bir modül içinde erişilebilirprotected — yalnızca sınıf içinde ve alt sınıflarında erişilebilirprivate — yalnızca dosya, sınıf veya nesne içinde erişilebilirKod örneği:
open class Base { private fun onlyBase() {} protected fun baseAndDerived() {} internal fun insideModule() {} public fun anyone() {} } class Derived : Base() { fun test() { baseAndDerived() // erişilebilir // onlyBase() — hata } }
Ana özellikler:
internal Kotlin'e özgüdür, Java'da yokturprivate, görünürlüğü dosyayla sınırlarKütüphane yayınlandığında internal değiştiricisi nasıl çalışır?
internal, elemanları bir modül içinde gizler, ancak bir kütüphane jar/aar olarak derlendiğinde, internal elemanlar yansıtma üzerinden görünür.
Bir sınıfın özelliği için private ve üst seviye bir fonksiyon için private arasındaki fark nedir?
Sınıfın özelliğindeki private, görünürlüğü yalnızca sınıf ile sınırlar, oysa üst seviye için yalnızca tanımlandığı dosya ile sınırlar.
Üst seviye bir fonksiyona protected uygulanabilir mi?
Hayır, protected yalnızca sınıf veya arayüz üyeleri için kullanılabilir. Üst seviye için protected kullanılamaz – derleme hatası olacak.
Büyük bir kütüphane, neredeyse tüm API'leri public olarak açıkladı, yardımcı programlar ve yardımcı fonksiyonlar da dahil – sonuç olarak kullanıcılar, uygulama detaylarına bağımlı hale geldi.
Artıları:
Eksileri:
Sadece gerekli sınıflar public olarak tanımlandı, diğerleri internal veya private, görünürlük seviyeleri net bir şekilde ayrıldı.
Artıları:
Eksileri: