Ocak 12, 2021

Kotlin Getters ve Setters Metotları

ile Gece

Kotlin’de bir class oluşturduktan sonra bunlara başka yerde erişmek istediğimizde nasıl çalıştığını biraz daha anlayalım. Class’lara değişken verebilmek için “var” ve “val” kullanmaktayız.

Bir class içinde değişkenlerimizi mutable(var) ve immutable(val) tanımladığımız da Kotlin default olarak Property tanımlamaktadır.
Var ve val olarak tanımladığımız propertylere getter ve setter’i olanlara var sadece get olana val olarak tanımlanmaktadır. Bu propertylere erişmek istediğimizde ise (.) işareti ile erişebiliriz.

Getter ve Setters ->

Kotlin otomatik olarak get ve set metotlarının oluşturmaktadır. Bu yüzden field ve value olarak iki adet tanımlayıcı bulunmaktadır.

value -> set metottu ile değer eklenir.
val favoriteauthor=”Franz Kafka”
olarak tanımlama yaptığımızda favoriteauthor’e kalıcı olarak “Franz Kafka” atamış olduk.

Backing field(field) getter ve setter metotları eklenerek referans(*) almaktadır. Var tanımı yaptığımız da backing field kavramı oluşturmuş oluyoruz.

Yukarıdaki örnekte favori yazarımızı decompile edip Java’ya çevirdiğimiz de get ve set kavramlarını daha iyi anlayabiliriz.

Aklımıza “kendimiz oluşturacağı özel get ve set oluşturabilir miyiz?” sorusu geliyorsa onu da hemen bir örnek ile açıklayalım.
Set değerinde bizlere bir geri dönüş değeri geliyorsa burayı manipüle ederek bizlere istediğimiz sonucu alabiliriz.
Örneğin :

Bu hatada null değeri almamız sebebi age değişkininin get >0 büyük olmasını aksi halde null dönmesini istiyoruz. Throw Exceptions fırlatarak burada “0’dan büyük bir değer” girmesini isteyebiliriz.

Backing Property

Kotlinde değişkenlerimiz propertylerden oluşmaktaydı fakat bizler getter ve setter kısımlarına doğrudan erişmek istersen ne yapmalıyız?https://geceugur.medium.com/media/a1b803b547900337e2267e50dcbb92aaKotlin

Yukarıdaki örnekte table get kısmına ulaşmak istediğimizde bizlere null değer durumunda ise _table = HashMap() üzerinden çıkartılmış değeri dönecektir. Return değeri null olma durumunda throw fırlatarak ise işlem yapacaktır.

Backing Property yaptığımız işlemde getter ve setter metotlarını kendimiz oluşturduğumuz için memoryde fazladan yer kaplamıyor olmaktadır.

Decompile edilip Java koduna çevirdiğimizde ise getter ve setter metotlarını bizler tanımla yaptığımız anlamına gelmekteyiz.

Konu Özeti ve Neler Öğrendik ?

Class oluşturduğumuzda değişken tanımlamalarının nasıl çalıştığını anlamış olduk?
Kotlin ve Java üzerinde mutable vs immutable nasıl çalıştığını?

Backing Property yapmak için iki değişken oluşturup birini private val yapmamız gerekiyor. İkinci değişkeni var olarak atayıp get kısmına birinci değişkenin değerini geri döndürmemiz gerekiyor.

Okuduğunuz için teşekkür ederim. Yazıyı yazarken Kotlin 1.4 sürümünden bilgiler alınmıştır.

Referanslar ->

Kotlin Documentation