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
Yorum Gönder