Kotlin - 9 - Görünürlük ayarı Extension Method


Sınıf, Obje, interface, constructors, fonksiyonlar, özellikler ve getter setter method ları visibility modifier içerebilir. 4 görünürlük söz konusu.  Local tanımlı değişken, sınıf yada fonksiyonlar visibility modifiers kullanamaz.

Package:
Özellikle tanımlanmaz ise ön tanımlı olanı “public” tir.
  1. "public" – Bu objenin her yerden erişilebilir olduğu anlamına gelir.
  2. "private" – Tanımı içeren dosya içinde erişilebilir.
  3. "protected"  - üst seviye tanımlar için kullanılabilir değil
  4.       "internal" – aynı modül (Kabaca birlikte derlenen dosyalar.) içinde erişilebilir.

Sınıf ve interface:
Özellikle tanımlanmaz ise ön tanımlı olanı “public” tir.
  1. "public" – tanımlı classı gören her yerden erişilebilir.
  2. "private" – Tanımı içeren Sınıf, ve memberları içinde erişilebilir.
  3. "protected”  - private + alt sınıflarda (bu sınıftan türetilen sınıflarda) erişilebilir.
  4. "internal” – aynı modül içindeki tanımlı classı gören her yerdeniçinde erişilebilir.

Constructors:
Özellikle tanımlanmaz ise ön tanımlı olanı “public” tir.

Extension:

Bir sınıfı kalıtmadan ya da Decorator gibi bir design patern kullanmada, ona ek özellik eklemek mümkün bunu, extension function olarak adlandırabiliriz. Kotlin c# ve Gosu gibi extension tanımlanmasına elverişlidir.


Örnek incelenir ise “.swap” şeklinde kendinden önce gelen “MutableList<T>” tipine swap adında bir method ekliyor, Ancak aslında Extensionlar class’ı değiştirmez yani yeni bir member eklemez ancak nokta ile çağrılabilir statik bir method ekler.


 Ancak Eklenmek istenen isimde bir member sınıfta zaten mevcut ve inputları aynı ise, her zaman member olan baskın çıkar, Fakat overload eklemek için ideal bir şekilde çalışır. Ayrıca “null” değerler için method ekleyerek kontrol eklenebilir.


Companion object kullanımı var isebu obje içinde extension özellik yada fonksyon eklenebilir. Ancak çağrılırken ana sınıfın memberları kullanılır gibi çağrılabilir. Extensionları kullanabilmek için en üst seviyeye ekleriz. Eğer dış bir paketteki extension’ı kullanmak ister isek paket tanımının altında import ederiz.

package com.example.usage
import foo.bar.goo // importing all extensions byname "goo"
// or
import foo.bar.* // importing everything from"foo.bar"


Yorumlar

Yazılar

Kotlin - 1 - Giriş

Genesys Nuance-ASR Entegrasyonu Port Kullanımı

Kotlin - 3 - Paket tanımı ve Import