Kotlin’e Giris ve Android Studio’ya Kotlin Eklentileri Yuklemek

Google I/O’da Kotlin’in Android yazilim gelistirmek icin kullanilabilecek resmi dillerden biri olarak aciklanmasinin ardindan, cogu Android gelistiriciyi buyuk bir merak sardi. Cogu kisi Kotlin’i daha onceden duymustu, hatta uygulamalarinda bile kullanan developerlar mevcut ama resmi olarak hayatimiza girmesi, ekstra bir heyecan yaratti.
Farkli kaynaklari arastirirken, Kotlin ile ilgili pek fazla Turkce kaynak olmadigini farkettikten sonra, Kotlin uzerine bir kaynak olmasi amaciyla bir yazi yazmaya karar verdim.
Kotlin nedir?
Kotlin’i kisaca tanimlarsak, JVM, Android, Javascript uzerinde ve ya herhangi bir VM olmadan derlenebilen, statik tipli bir programlama dilidir. JetBrains tarafindan Saint Petersburg’daki yazilimcilarca gelistirilmektedir. Adi ise Saint Petersburg yakinindaki Kotlin Adasi’ndan gelmektedir.
Peki neden Android takimi Kotlini secti?
Bu soruya bu konudaki kendi ifadelerini Turkce’ye cevirerek cevap vermek daha mantikli olacak;
Neden Kotlin?
Neden Android ekibi kotlini desteklemeye karar verdi?
En onemli sebep, Kotlinin Android uygulama yazmayi daha eglenceli ve kolay yapabilecek mukemmel bir dil olmasi.
Kotlin ayni zamanda su anda calisan Android ekosistemine uyabilecek mukemmel bir parca gibi. Java programlama dili ile %100 uyumlu. Eger iki dili bir projede kullanarak denemek isterseniz, hali hazirda calisan projenize istediginiz kadar Kotlin kodu ekleyebilirsiniz, sikintisiz calisacagini goreceksiniz. Kotlin ile yazilmis kod icerisinden, Java ile yazilmis herhangi bir kodu rahatlikla cagirabilirsiniz. Bunlara ek olarak, herhangi bir gelistirici eforu sarfedilmeden elde edebilecegimiz pek cok otomatik uygulanan ozellikleri vardir. (Ornegin, getter ve setter methodlari siz ugrasmadan olusturulur). Bir kac Kotlin Annotation’i ile cevirmenin nasil yapilacagini da siz belirleyebilirsiniz.
Son olarak pek cok gelistirici bize Kotlin dilini cok sevdigini soyledi. (Android ekibimizdeki pek cok gelistirici de ayni dusunceyi paylasiyor.) Android platformu icin buyuk bir gelistirici toplulugu bulunan bu dil, seminerlerde de Android Ekibimize buyuk olcude soruluyordu. Biz de toplulugun istegini dinledik.
Peki kod anlaminda ne gibi avantajlari var?
Kotlin’in en cok dikkat ceken yanlarini kisaca kod uzerinde anlatalim. Bunu yaparken Android Developer Blog’da kullanilan kodlarin bazilarini referans olarak alacagim.
- Kotlin, uygulamanizda null olabilecek degerleri engellemek icin, degisken belirlerken bu kismi dusundugumuzden emin olmamizi istiyor.
var neverNull: String = "something"
var mightBeNull: String? = null // "?" degerin null olabilecegini gosterir
if (neverNull.length > 0) { // Bu kabul edilebilir.
…
}
if (mightBeNull.length > 0) { // Compiler burada hata verecektir.
…
}- Named Parameters ve Default arguments
Named parameters, parametrelere deger atarken, atadigimiz degerin karsiliginin hangi alana yazildigini gormemize yardimci oluyor, dolayisi ile okunabilirligi arttirmis oluyoruz.
Default arguments ise parametrelere belirli sabit degerler verebilmemize yardimci oluyor, bu degerler parametrelere herhangi bir deger atanmadiginda o verilerin bos kalmasini engellemis oluyor.
fun orderPizza(size: Size,
pepperoni: Boolean = false,
mushrooms: Boolean = false,
ham: Boolean = false,
pineapple: Boolean = false,
pickles: Boolean = false,
sausage: Boolean = false,
peppers: Boolean = false,
onion: Boolean = false)
{
...
}
orderPizza(Size.LARGE, ham = true, mushrooms = true)- When kontrol mekanizmasi
Kotlin switch-case kontrolunu, when mekanizmasina cevirerek kullanmaktadir.
when {
password.equals("password") -> println("Insecure password!")
password.length < 4 -> println("Too short!")
else -> {
println("Secure password!")
}
}- Akilli Cast mekanizmasi
Java’da ozellikle Android gelistirirken pek cok yerde karsimiza cikan, nesneyi Cast ederek kullanma problemi, Kotlin’de kolayca cozuluyor.
if (obj is String) {
// Compiler obj degerini Stringe cast ediyor
// Dolayisiyla obj artik String classina ait nesneleri
// kullanabilir
if (obj.length > 0) {
…
}
}Ayni sistemi when ile de kullanabiliriz
when (obj) {
is Cat -> obj.meow(...)
is Dog -> obj.woof(...)
else -> {
…
}
}- Extension Functions
Kotlin’in butun guzel ozelliklerinin yaninda benim favorim, Extension Functions. Mesela, Activity class’inda toast mesajini daha kolay yayinlamak icin, toast adinda bir method mu istiyorsunuz, basitce prefix olarak eklemek istediginiz class’in adini yazip sonuna methodu eklemeniz yeterli.
fun Activity.toast(toastMessage : String, duration: Int = Toast.LENGTH_SHORT) {
Toast.makeText(this, toastMessage, duration).show()
}- Destructuring Declarations
Kotlin’de data classlarini olusturmak da cok kolay. Getter ve setter methodlarina ihtiyac duymadan parametre adiyla deger atayabilir ya da degeri cagirabiliriz.
data class Order(val itemCode: String, val quantity: Int,
val price: Float)Data classlarini olusturmak iste bu kadar kolay! Simdi konu basligimizdan bahsedelim.
fun getOrder(...): Order {
...
return Order(itemCode, quantity, price);
}
val (what, howMany, howMuch) = getOrder(...)Yukaridaki kodda olan olay su; getOrder metodu cagirilir ve bize Order objesinin uc parametresiyle geri bir nesne uretir. Bu uc nesne otomatik olarak, what, howMany ve howMuch degerlerine atanir.
- Lambdas
Lambda’lar cok karmasik programlama paradigmalarini cok basite indirgeyen mekanizmalardir. Kotlin bunu tamamen desteklemektedir.
fun allStrings(collection: Collection)=
collection.all { it is String }
// Yukaridaki kod parcacigi, bir Collection’daki tum ogelerin String // olup olmadigini kontrol etmektedir.- Developer blog uzerinde belirtilmemis ama benim cok begendigim baska bir ozelligi ise Higher Order Functions.
High Order Functions, bir fonksiyonu kendisine parametre olarak alabilen veya baska bir fonksiyonu return type olarak geri verebilen fonksiyonlara verilen isimdir.
fun <T> lock(lock: Lock, body: () -> T): T {
lock.lock()
try {
return body()
}
finally {
lock.unlock()
}
}Burada Kotlin’in kendi dokumantasyon sayfasinda kullanilmis ornek uzerinden anlatmak daha mantikli olacak. Lock fonksiyonumuz iki tane parametre almakta; birisi lock objesi, digeri ise body funksiyonu, T tipinde bir obje donduren bir fonksiyon.
Ilk once lock objesi lock metodunu cagiriyor, sonra try blogu icerisinde, body metoduyla gelecek degeri return etmeye calisiyor. Yani aldigimiz parametre fonksiyonu direk kullaniyoruz. Finally kisminda ki unlock() ile de lock objesinin islemini bitiriyor.
En onemli noktalardan bahsettik; tabiki Kotlin bunlarla sinirli degil. Kotlin’i ogrenmek icin uygulama gelistirmeye baslamamiz gerekiyor. Benim tavsiyem baslamadan once , Kotlin Koan’larini, yani resmi Kotlin egitimlerini, bitirip en azindan dil ile ilgili temel bilgiye sahip olmanizin iyi olacagi yonundedir.
Android Studio’ya Kotlin Eklentilerinin Yuklenmesi
Android Studio 3.0 Canary 8 kullanmanizi tavsiye ediyorum. Stabil versiyon’da henuz Kotlin destegi olmadigi icin eklemeniz gerekecek.
“Hayir, ben stabil versiyonuna Kotlin eklemek istiyorum.” diyorsaniz, asagidaki yonergeleri takip edin. Canary versiyonu indirenler ‘Android Studio 3.0 Canary Kullananlar!’ basligina direkt gecebilir.
- Android Studio’nuzu acin ve Android Studio ayarlarina gecin.
- Acilan ekranda “Plugins” veya “Eklentiler” secenegini tiklayarak eklenti ekranina ulasin.

- Daha sonra “Install JetBrains plugin…” ya da “JetBrains eklentisi ekle…” secenegini tiklayarak JetBrains eklentileri penceresini acin. Sol ustte bulunan arama kismina “Kotlin” yazip, Kotlin’i yukleyin.
- Bunu yaptiktan sonra ise degisiklikleri kullanabilmek icin Android Studio’yu tekrar baslatmaniz gerekli.
Yukleme kismini basariyla bitirdik.
Kotlin ile Proje Olusturma
Simdi ise stabil versiyonda Kotlin projesi nasil olustururuz bununla devam edelim:
- Basit bir sekilde yeni bir proje olusturun. File|New|New Project… veya Dosya|Yeni| Yeni Proje… seceneklerini tiklayarak yeni proje olusturun.
- Kotlin’i entegre etmenin en kolay yolu, kodu Kotlin’e cevirecek bir komutu calistirmak olacaktir.(Evet boyle kolaylastirici bir hizmetleri var). Menude “Code” ve “Convert Java file to Kotlin File” veya “Kod” ve “Java dosyasini Kotlin dosyasina cevir” secenegini tiklayin.
- Activity sayfasinda kodun degistigini ve bir hata aldiginizi goreceksiniz.

- Kotlin’in yuklenmemis oldugunu bildiren bir hata aldiniz. Yukleyip projenize dahil edin. Projeye dahil etme isleminden sonra gradle dosyasinin degistigini goreceksiniz.

- Boylece Kotlin projenize eklenmis oldu.
Tebrikler, Stabil modda devam etmek isteyen developerlar, projeniz hazir. Artik kodu calistirdiginizda Kotlin ile Hello World projeniz olusturulmus olacak. Tebrikler!
Android Studio 3.0 Canary Kullananlar!
- Normal Android Studio projesi olustur gibi File|New|New Project… ve ya Dosya|Yeni| Yeni Proje… seceneklerini tiklayarak yeni projeyi olusturun.
- Sonra gelen ekranda Include Kotlin Support secenegini isaretleyerek “Next” e tiklayin.

- Olusan proje Kotlin ile olusturulmus ilk Hello World uygulamaniz oluyor. Tebrikler!
Sonuc
Kotlin dilinde calismak oldukca eglenceli. Pek cok fonksiyonu ve kolayligi olan bir dil ama tekrar ediyorum Android uzerinde calismaya baslamadan once kesinlikle, Kotlin Koan’i bitirmenizi tavsiye ediyorum. Ayrica Ingilizce seviyeniz iyi ise asagidaki iki videoyu izlemenizi de kesinlikle tavsiye ederim.
Bu makaleyi burada noktaliyorum. Bir sonraki makalede ise Kotlin ile pek cok kutuphaneyi kullanarak (Glide, Kotlin Android Extensions, Retrofit…) basit bir uygulama yapmayi anlatacagim.
Herhangi bir sorunuz veya oneriniz varsa duymak isterim.
Happy coding!
Salih.
Kaynaklar:
- Android Developers’ Blog
- Official Kotlin Website