Kotlin Erişim Belirleyiciler

tarafından
84
Kotlin Erişim Belirleyiciler

Erişim belirleyiciler gerçekten çok önemli bir konudur.

Sınıflar, Objeler, Constructorlar, Fonksiyonlar, Interfaceler, properties ve onların Setterları erişim belirleyicileri alabilirler.

Getter’lar ise her zaman properties ile aynı erişim belirleyiciye sahiptirler.

Kotlin içerisinde 4 farklı erişim belirleyici vardır: private, protected, internal ve public. Herhangi bir erişim belirleyici verilmemiş ise varsayılan olarak public olur.

Paketlerde Erişim Belirleyiciler

Fonksiyonlar, properties, sınıflar, objeler ve interfaceler “top-level” olarak paketlerin içinde doğrudan tanımlanabilir.

// dosya adı: example.kt
package foo

fun baz() { ... }
class Bar { ... }

Eğer herhangi bir erişim belirleyici belirtmezseniz varsayılan olarak public kabul edilir. Yani tanımladığınız şey her yerden erişilebilir.

Eğer tanımladığınız şeyler için private kullanırsanız, sadece tanımladığınız dosya içerisinde erişilebilir.

Tanımlamanızı internal olarak yaparsanız aynı modüldeki her yerden erişilebilir.

protected erişim belirleyici “top-level” tanımlamalarda kullanılamaz!

Başka bir paketten görünür bir “top-level” kullanmak için, yine de import yapmanız gerekir.

Örnek:

// dosya adı: example.kt
package foo

private fun foo() { ... } //  example.kt dosyasının içinde erişilebilir

public var bar: Int = 5 // property her yerden erişilebilir public tanımlandığı için
    private set         // setter sadece example.kt dosyasının içinde erişilebilir

internal val baz = 6    // example.kt dosyası ile aynı modülde yer alan yerlerden erişilebilir.

Sınıflar ve Interface’lerde Erişim Belirleyiciler

Sınıfın içinde tanımlanmış üyeler için:

private sadece tanımlandığı sınıf içinde erişilebilir (tanımlandığı sınıfın bütün üyelerini kapsar)

protected belirleyici private ile aynı erişimi verir ama alt sınıflarda da erişilebilir

internal aynı modülden erişilebilir

public her yerden erişilebilir

Kotlinde dış sınıf inner sınıfların içindeki private üyelere erişemez

Eğer protected bir üyeyi override ediyorsanız ve erişim belirleyiciyi değiştirmiyorsanız override ettiğiniz üyelerde protected durumdadır.

Örnek

open class Outer {
    private val a = 1
    protected open val b = 2
    internal val c = 3
    val d = 4  // erişim belirleyici default olarak public

    protected class Nested {
        public val e: Int = 5
    }
}

class Subclass : Outer() {
    // a değişkenine erişilemez
    // b, c ve d erişilebilir
    // Nested ve e erişilebilir

    override val b = 5   // 'b' protected
}

class Unrelated(o: Outer) {
    // o.a, o.b erişilemez
    // o.c ve o.d erişilebilir (aynı modül içinde olduları için)
    // Outer.Nested erişilemez, ve Nested::e her ikisi içinde erişilemez
}

Constructorlar’da Erişim Belirleyiciler

Constructor için constructor anahtar sözcüğünü eklemeniz gerekmektedir.

class C private constructor(a: Int) { ... }

Yukarıdaki örnekte constructor private tanımlanmıştır, normalde constructorlar varsayılan olarak public kabul edilir. Sınıfın erişilebildiği her yerde erişilebilir. (eğer sınıf internal ise sadece aynı modülde erişilebilir)

Yerel Tanımlamalar

Yerel değişkenler, fonksiyonlar ve sınıflar erişim belirleyici alamazlar.

Modüller

Internal erişim belirleyici, üyenin aynı modül içinde görünür olduğu anlamına gelir. Daha spesifik olarak, bir modül, birlikte derlenen bir Kotlin dosyaları kümesidir:

IntelliJ IDEA module

Maven project

Gradle kaynak kümesi(bir istisna olarak test maindeki internal tanımlamalara erişebilir )

<kotlinc>

Kaynak

Kaynağa başlığa tıklayarak ulaşabilirsiniz. Var ise hatalar için veya katkı sağlamak için mail atabilirsiniz. umutcansahin@disketcanavari.com