Kotlin - 7 - Özellikler ve Alanlar (Properties and Fields)


Özellik (Property) Tanımlama:
Kotlin’ de değişebilen özellikler “var” ile read-only olanlar ise “val” ile tanımlanabilir. Özelliğe erişmek için basitçe adı ile kullanmak yeterlidir. Property tanımlama için ideal syntax aşağıdaki gibidir.

var <propertyName>[: <PropertyType>] [= <property_initializer>]
[<getter>]
[<setter>]

getter ve setter method ları opsiyoneldir, “val” değişken tanımlandığında default getter method’u kullanılır ancak setter tanımlanmaz zira değişken mutuable değildir. Normalde kotlinde field kullanışlmaz, ancak bazen gerekli oluyor örnek olarak getter setter larda olduğu gibi erişim sağlamak istediğinizde Kotlin otomatik olarak “Backing field” yaratır, Bu sayede değişkenin değerine sadece accessors lardan olmak kaydı ile “field” keyword’ü ile ulaşabiliriz.



Eğer “field” (backing field) kullanımı işinizi görmez ise standart yaklaşım kullanabilirsiniz.  Aslında Bu ksım Java da ki ile aynı, ancak şunu unutmamak lazım “field” kullanmak, fazladan obje yaratmaktan kaçınmak demek.

Derleme zamanı sabitleri:
const” ifadesi ile işaretlenirler, bir objenin üs seviye elemanı olmalı, String veya primitive type ile initialize edilmeli ve default getter kullanmalı modifiye edilmemelidir. B tarz sabitler, annotation da kullanılabilir.

const val SUBSYSTEM_DEPRECATED: String = "This subsystem is deprecated" @Deprecated(SUBSYSTEM_DEPRECATED) fun foo() { ... }


Geç Initialize edilen Özellikler (Late-Initialized Properties):
Normal şartlarda değişkenler nullable değildir ve Constructor da initialize edilmesi gerekir, Ancak çok sık olmasa da bu yapı bazen ihtiyacı karşılamıyor. Örneğin bağımlılık olduğu zamanlar ya da Unit test lerin setup method larında, bazen çalışma anında initialize edilmesi ihtiyaçları oluşuyor. Bu durumlarda için değişkeni “lateinit” mofier’ı ile işaretler isek sonradan initialize edecek şekilde kullanabiliriz. Ancak bu amaçla kullanılacak değişkenin standart getter ve setter larının override edilmemiş olması ve ilkel tip olması gerekir.
Ancak değer ataması yapılmadan erişilmeye kalkılır ise sistem özel bir exception fırlatır.

Yorumlar

Yazılar

Kotlin - 1 - Giriş

Genesys Nuance-ASR Entegrasyonu Port Kullanımı

Kotlin - 3 - Paket tanımı ve Import