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.
Kotlin Plugin’i yükleyin
Öncelikle “Preferences >> Plugins >> Install JetBrains plugin” bölümünden Kotlin Plugin’ini bulup Android Studio’ya yükleyin.
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.
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.