1- var ile val nedir, ne amaçla kullanılır?
- val, değiştirilemeyen yani immutable değişkenler için kullanılır.
- var, değiştirilebilir yani mutable değişkenler için kullanılır.
2- open keyword ne işe yarar?
Kotlin dilinde her şey final’dır, yani değiştirilemez. Bu yüzden kullanılmak istenen sınıfların ve fonksiyonların önüne open keyword yazılmalıdır.
3- val ve const arasındaki fark nedir?
Her ikisi de değiştirilemez yani immutable değişkenler için kullanılır. Fakat val runtime constant olarak kullanılır; const ise compile time constant olarak setlenmektedir.
4- lateinit ile lazy anahtar kelimeleri ne işe yarar, aralarındaki fark nedir?
- lateinit, late initialization yani daha sonradan bir değer atamak istenen değişkenler için kullanılır. var ile beraber kullanılır.
- lazy, kullanıldığında ya da ilk kez çağrılması sırasında değişkeni setlemek için kullanılan bir keyword, val ile beraber kullanılır. Değişken setlendikten sonra aynı değer tekrar tekrar kullanılır.
5- Lifecycle-aware Component’lara örnek verebilir misiniz?
ViewModel ve LiveData
6- data class nedir, kullanım avantajı var mıdır?
data class, verileri tutmak için kullanılan sınıflardır. Normal sınıflardan farklı olarak equals(), hashCode(), copy(), toString() methodlarını kendi içinde barındırdığı için bu methodları manual olarak tekrar yazma ihtiyacı da olmuyor.
7- double equal (==) ile triple equal ( ===) arasındaki fark nedir?
- == nesneleri ve içindeki veri değerlerini karşılaştırır.
- === nesnelerin tutulduğu memory adresini yani referans bilgisini karşılaştırır.
8- Kotlin dilinde, Java dilindeki gibi static keyword var mıdır? Yoksa bu işlemi nasıl yapabiliriz?
Kotlin’de static keyword yoktur. Bu özelliği kullanabilmek için 3 yöntem kullanılabilir;
- companion object kullanılabilir
- object keyword ile sağlanabilir.
- Kotlin file (.kt) içerisine yazılacak (package-level) değişken ve fonksiyonlar ile sağlanabilir.
9- Coroutine nedir
Coroutine’ler light-weight thread olarak geçer, hafif thread olduğu için CPU zorlamadan multi-threading özelliği sağlar
10- Light-weight thread denilme nedeni nedir?
Coroutine’ler bire bir Thread ile map etmemektedir. Thread’ler çalıştığında kendi Stack leri oluyor ve değişkenler burada tutuluyor. Couroutine ile Stackless bir yapıda olması ve varolan ThreadPool kullanılarak işlerini yaptıkları için light-weight thread diye geçiyor. Ayrıca tek seferde 100 tane Thread başlatsanız bile eğer makine 8 çekirdekli ise sadece 8 thread çalışır ve diğer threadler beklemeye başlar, ama coroutineler başlayıp, işlerini yapabilirler.
11- suspend keyword nedir?
suspend, fonksiyonlar için kullanılarak, bu fonksiyonun main thread i engellemeden coroutine bloğunda işini yapması sağlamak için kullanılan bir anahtar kelime. Coroutine içerisinde bulunan çalışabileceği(started), bekleyebileceği(suspended) ve kaldığı yerden devam edebileceği(resumed) kod bloklarını ifade eder.
12- Kısaca ****Flow çalışma mekanizması hakkında bilgi verebilir misiniz?
Flow, Java’daki Producer-Consumer mekanizmasına benzemektedir. Yapılacak işler emit() fonksiyonu ile üretilir ve collect() fonksiyonu ile de tüketilir.
13- Design patterns (Tasarım desenleri)’nden hangilerini biliyorsunuz/kullandınız?
Singleton, Factory, Builder, Adapter
14- Java’daki gibi Singleton tasarım desenini Kotlin’de nasıl sağlanabilir?
object keyword ile sağlanabilir.
15- Kotlin access modifiers (erişim değiştiricileri) hangileridir? Default olan hangisidir?
private, protected, internal, public. Eğer hiç biri yazılmazsa, public default olarak kullanılır.
16- Birden fazla if-else bloğu kullanmamak ve Java’daki switch alternatifi olup, Kotlin’de kullanılan döngü hangisidir?
when döngüsü (when loop)
17- Extension function nedir?
Var olan bir nesneyi değiştirmeden, ona yeni bir özellik eklemek istediğimiz kullanılan fonksiyonlardır. Örneğin: Glide kullanılırken kod tekrarını kaldırmak için sınıfına yeni bir fonksiyon eklemek.
18- Higher-order function nedir?
Başka bir fonksiyonu parametre olarak alan ya da return değeri olarak bir fonksiyon döndüren fonksiyonlara higher-order function denir.