Tutorial: ToDo-Kotlin

Son zamanlarda Kotlin’in adını Android Community içerisinde çok duymaya başladık. Ben de ‘Bu Kotlin nedir?’ diye merak ettim ve araştırmaya başladım. Kotlin ile ilgili İngilizce bir çok kaynak ve tutorial mevcut, fakat Türkçe bir kaynağa rastlayamadım ve bu blog yazısını yazmaya karar verdim.

Bu tutorial’da basit bir To-Do uygulaması yazacağız. RecyclerView, EditText ve Button’dan oluşan basit bir arayüz ile kullanıcı listeye eleman ekleyebilecek.

TodoKotlin uygulamasının son hali

Kotlin Plugin’i yükleyin

Öncelikle “Preferences >> Plugins >> Install JetBrains plugin” bölümünden Kotlin Plugin’ini bulup Android Studio’ya yükleyin.

Kotlin Plugin

Configure Kotlin in Project

Empty Activity template‘i ile yeni bir proje başlattıktan sonra “Tools >> Kotlin >> Configure Kotlin in Project”i seçerek tüm modüller için Kotlin konfigürasyonunu tamamlayın.

Configure Kotlin in Project

Project Level build.gradle şu şekilde olmalı

app/build.gradle ise şöyle

Convert Java File to Kotlin File

Şimdi sırada MainActivity.java‘yı MainActivity.kt‘ye çevirmek var. Neyse ki JetBrains bunun için bir tool hazırlamış. Bu tool ile anında Java dosyasını Kotlin’e çevirebiliyoruz. Tek yapmamız gereken MainActivity.java‘yı açıp yukarıdaki menüden “Code >> Convert Java File to Kotlin File”ı seçmek.

Evet, şimdi Kotlin’e merhaba diyebilirsiniz.

Java’ya aşina olan biri Kotlin’i de çok rahat anlayabilir diye düşünüyorum. Kotlin’de satır sonunda noktalı virgül (;) yok. extends keyword’ü yerine de iki nokta üst üste (:) kullanılıyor. Kotlin ile ilgili daha fazla bilgi için burayı ziyaret edebilirsiniz.

Rename java folder to kotlin

Artık “app > src > main > java” klasörünü “app > src > main > kotlin” olarak adını değiştirebiliriz.

Anko Extensions

Kotlin geliştiricileri Android kodlamayı daha kolay ve hızlı bir hale getirmek için Anko’yu yazmışlar. Anko, Kotlin’deki extension functions ve higher-order functions gibi özellikler kullanılarak oldukça güçlü bir kütüphane haline gelmiş. O kadar güçlü ki Android’de XML’ler ile UI oluşturmak yerine aşağıdaki gibi Anko DSL kullanabiliyoruz.

Yukarıdaki kod ile vertical bir LinearLayout içerisine EditText, Button yerleştirdik ve Button’a OnClickListener set ettik. Ben de TodoKotlin’de UI’ı Anko DSL ile oluşturacağım.

Anko’yu projeye eklediğimde app/build.gradle’ın son hali şöyle oluyor.

RecyclerView kullanacağım için ‘com.android.support:recyclerview-v7:25.0.0’ ı da dependency olarak ekledim.

Şimdi sıra geldi kod yazmaya;

ToDoListAdapter.kt

MainActivity.kt

setContentView(R.layout.activity_main.xml)‘i kaldırıp yerine Anko DSL kullanarak layout oluşturdum. Vertical bir LinearLayout içerisine RecyclerView, EditText ve Button yerleştirdim. Button’a tıklandığında ToDoListAdapter’e EditText içerisindeki yazıyı ekleyen listener set ettim.

Biraz daha açıklık getirmek gerekirse örneğin “button {}” bloğu içerisindeki şu satır ile

text = "Add"

aslında

button.setText("Add")

methodunu çağırmış oluyorum. Kotlin’de setter ve getter’lar için property access olduğundan bu şekilde yazabildim.

Bir başka soru işareti de editText.asString() ve editText.clear() methodları ile ilgili aklınızda belirmiş olabilir. Burada da EditText’e extension function yazdım. ViewExtension.kt adında bir Kotlin dosyası oluşturup bu iki methodun implementasyonunu şu şekilde belirttim.

Artık bütün EditText instanceları için bu iki methodu kullanabilirim.

Extract UI code

UI ile ilgili kodu başka bir sınıfa veya methoda çıkarmak her zaman daha iyi bir yaklaşımdır. Bu nedenle Anko DSL kodunu MainActivityUI.kt’ye çıkarıyorum.

MainActivityUI.kt

MainActivity.kt

MainActivity’de UI ile ilgili kod artık tek satırdan oluşuyor.

Bir başka extension function örneği olarak;

addItemDecoration(DividerItemDecoration(ctx, LinearLayout.VERTICAL))

şu satır yerine

defaultDivider()

böyle yazmak daha hoş olabilirdi diyerek aşağıdaki extension function’ı yazıyorum.

“_RecyclerView”, Anko içerisindeki RecyclerView‘e tekabül ediyor. Böylece recyclerView bloğum aşağıdaki gibi oldu.

recyclerView {
val orientation = LinearLayoutManager.VERTICAL
layoutManager
= LinearLayoutManager(ctx, orientation, false)
defaultDivider()
adapter = todoListAdapter
}

Son

Kotlin ilk başta zor gelebilir ama alıştıktan sonra ve Java’ya kıyasla nasıl kolaylıklar getirdiğini gördükçe daha da seveceğinizi düşünüyorum.

Bu arada projenin kaynak koduna https://github.com/sembozdemir/ToDoKotlin adresinden erişebilirsiniz.