Kotlin ile Android Geliştirmek

Kotlin ile Android Geliştirmek

Bu yazımda Kotlin ile Java’yı karşılaştıracağız ve artılarını eksilerini konuşacağız. Neden Android geliştirirken Kotlin programlama dilini de düşünmemiz gerektiğinden bahsedeceğiz. Öncelikle epey bir süredir Kotlin ile Android yazılım geliştirmek mümkün olsa da Google tarafından resmi olarak desteklenen dil hâla Java programlama diliydi ta ki Google I/O 2017’e kadar. Google, I/O 2017’de Kotlin’i de resmi Android geliştirme diline dahil ettiğini söyledi. Böylelikle biz geliştiriciler de bu yeni programlama dilini merak etmeye başladık ve acaba nasıl olur diye düşünmeye başladık. Hadi gelin hep birlikte bakalım. Öncelikle Kotlin eklentisi Android Studio 3.0 ile tamamen uyumlu hale getirildi ve dilerseniz buradan indirebilirsiniz. Kotlin JetBrains tarafından geliştirilmiş bir programlama dilidir. Android Studio’nun temelini aldığı IntelliJ ekibiyle aynı şirket yani. Bu yüzden geliştirme ortamındaki uyumluluk maksimum düzeyde. Kotlin’e Merhaba diyelim :

package helloWorld

fun main(args: Array) {
   println("Hello World!")
}

İlk bakışta süslü parantezleri , sınıfları , paketleri , fonksiyonlari ve methodları görmek rahatlatıcı oluyor. Fakat daha da derine indikçe , Kotlin programlama dilinin daha modern ve eşsiz bir dil olduğunu görebilirsiniz.  Kotlin, ne düşündüğünüz ile ne kodladığınız arasındaki farkı oldukça minimal seviyeye çekiyor. Öyle ki düşündüğünüz şeyi kodlarken çok fazla zorluk çekmiyorsunuz. Örneğin Java’daki hazır olarak gelen boilerplate diye tabir ettiğimiz equals(), hashCode(), toString() gibi fonksiyonları basit bir sınıf içerisinde override ederken bile çok efor sarfedebiliyoruz. Örneğin :


public class Customer {
   private String name;
   private String email;
   private String company;

   public Customer(String name) {
       this(name, "", "");
   }

   public Customer(String name, String email) {
       this(name, email, "");

   }

   public Customer(String name, String email, String company) {
       this.name = name;
       this.email = email;
       this.company = company;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getEmail() {
       return email;
   }

   public void setEmail(String email) {
       this.email = email;
   }

   public String getCompany() {
       return company;
   }

   public void setCompany(String company) {
       this.company = company;
   }

   @Override
   public boolean equals(Object o) {
       if (this == o) return true;
       if (o == null || getClass() != o.getClass()) return false;

       Customer customer = (Customer) o;

       if (name != null ? !name.equals(customer.name) : customer.name != null) return false;
       if (email != null ? !email.equals(customer.email) : customer.email != null) return false;
       return company != null ? company.equals(customer.company) : customer.company == null;
   }

   @Override
   public int hashCode() {
       int result = name != null ? name.hashCode() : 0;
       result = 31 * result + (email != null ? email.hashCode() : 0);
       result = 31 * result + (company != null ? company.hashCode() : 0);
       return result;
   }

   @Override
   public String toString() {
       return "Customer{" +
               "name='" + name + '\'' +
               ", email='" + email + '\'' +
               ", company='" + company + '\'' +
               '}';
   }
}

Kotlin programlama dilinde ise aynı işlevi gören sınıfı yazmak için aşağıdaki kodu yazmak yeterlidir.

data class Customer(var name: String, var email: String = "",
                    var company: String = "")

Kotlin’in Tarihçesi Kotlin programlama dili bir süredir piyasada kullanıma hazır bir şekilde bulunmaktaydı. 2011 yılında duyruldu ve ilk önizleme sürümü 2012 yılında çıktı. Kotlin 1.0 2016 yılında çıkarıldı. https://kotlinlang.org/ websitesinde bir çok eğitim materyaline ulaşabilirsiniz ve Kotlin dilini hızlıca öğrenmeye başlayabilirsiniz. Neden Kotlin ?  Öncelikle Google neden Kotlin programlama dilini desteklemeye başladı derseniz bence Java ile %100 uyumu böylelikle daha önce yazılmış uygulamalar için bir sorun teşkil etmeyecek isterseniz Java ile yazılmış sınıfılarınızı olduğu gibi bırakarak bundan sonra geliştireceğiniz sınıfları Kotlin ile yazmaya devam edebilecek olabilme imkanınızdır. Tüm bunların yanı sıra dilerseniz tek bir tuşla tüm Java sınıfınızı aynı işlemi yapan Kotlin ile yazılmış koda çevirmeniz de mümkün olacak. Yani %100 bir uyum söz konusu olduğu için Android ekibi bu programlama dilini desteklemek için hiç çekinmemiş diyebiliriz. Hızlı bir tur atalım Nullable : Kotlin değişkenleri null değerini özellikle bu iş için tanımlanmış değişkenlerde tutabiliyor ve böylelikle meşhur NullPointerException istinasından kurtulmuş oluyoruz .


var neverNull: String = "something"
var mightBeNull: String? = null // "?" null olabileceğini gösteriyor

if (neverNull.length > 0) {   // Sorun yok
    …
}

if (mightBeNull.length > 0) { // Derleyici hatayı sizin için farkedecektir.
    …
}

İsimlendirilmiş parametreler ve argümanlar : Bir sürü parametre alan fonksiyonları takip etmek oldukça zordur ve bunu birçoğumuz da yaşamıştır eminim. Örneğin :


fun orderPizza(size: Size, pepperoni: Boolean, mushrooms: Boolean,
               ham: Boolean, pineapple: Boolean, pickles: Boolean,
               sausage: Boolean, peppers: Boolean, onion: Boolean)
{
    ...
}

// Acaba önce pizzama hangi malzemeleri ekledim?
// Bu seçeneği illa ki seçmek mi zorundayım ?
orderPizza(Size.LARGE, true, false, false, false, true,
           false, true, false)

Aynı senaryo için Kotlin ile yazılmış bir koda bakalım :

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)

İstenmediğiniz bir pizzayı sipariş etmek gibi trajik bir olayın yanında buna ek olarak oldukça okunabilirlik katılmış durumda. When ifadeleri : Bu ifadeler switch-case daha kısa ve efektif hale getirilmiş şekli diyebiliriz.

// Please don't put this in your app!
when {
    password.equals("password") -> println("Insecure password!")
    password.length < 4 -> println("Too short!")
    else -> {
        println("Secure password!")
    }
}

Smart Casting

if (obj is String) {
    // Derleyici bunu sizin için String tipinde cast edecektir.
    // iç içe if ifadelerinde de geçerlidir.
    if (obj.length > 0) {
        …
    }
}

Bu ifadeyi when ile genelleştirirsek :

when (obj) {
   is Cat -> obj.meow(...)
   is Dog -> obj.woof(...)
   else -> {
        …
   }
}

Genişletilebilir Fonksiyonlar : Kotlin ile var olan tiplerde veya sınıflarda herhangi ek bir sınıfa ihtiyaç duymadan yeni özellik ekleyebilirsiniz.


// "String." ifadesi ile bu methodun String
// sınıfından genişletileceğini belirtiyoruz.
fun String.toPigLatin() : String {
    ...
}

val plainOldString : String = "some text"

// toPigLatin methodunu String sınıfı için çağırabiliriz artık.
println(plainOldString.toPigLatin())

//Ya da :
println("some text".toPigLatin())

Destructing İfadeler : Yukarıda data class tanımlamanın ne kadar kolay olduğunu görmüştük:

data class Order(val itemCode: String, val quantity: Int,
                 val price: Float)

Bu veri yapısını kullanan fonksiyonların çoklu geriye dönüş değeri döndürmesi mümkün olacak.


fun getOrder(...): Order {
    ...
    return Order(itemCode, quantity, price);
}

Aşağıdaki ifade Order objesini alır ve what,howMany,howMuch değerlerine atama yapar.

val (what, howMany, howMuch) = getOrder(...)

Lamda İfadeler Fonksiyonel programlama paradigmalarını kullanılabilir hâle getirmek için Kotlin, lamda ifadeleri destekliyor. Aşağıda basit bir String ifadesinin lamda ile kullanımı var :


fun allStrings(collection: Collection)=
    collection.all { it is String }

Lamda ifadeleri Kotlin’in en güzel özelliklerinden birisidir denilebilir. JSON vari blockların oluşturulması da bunun cabası.


fun generatePage(withEmphasis : Boolean) {
    val result =
        html {
            head {
                title { +"Kotlin Builders" }
            }
            body {
                h1 { +"Kotlin Builders" }
                p {
                    +"This is "
                    if (withEmphasis) b { +"really " }
                    +"interesting"
                    a(href = "https://goo.gl/rHwJio") { +"More here" }
                }
            }
        }
    println(result)
}

Alıştırma Kotlin dilini öğrenmek istiyorsanız veya birkaç deneme yapayım diyorsanız hemen buradan başlayabilirsiniz. Kotlin’i uygulamanızda kullanmak istiyorsanız :

  1. Android Studio 3.0 indir
  2. .java uzantılı dosyalarınızı açın.
  3. Invoke “Code > Convert Java File to Kotlin File”

Bundan sonra IDE, size projenize Kotlin bağımlılıkalarını eklemeyi gösterecek ve var olan Java kodunuzu aynı işlevi gören Kotlin kodu ile değiştirecektir.


Paylaş :

Full Stack Developer · Yazılım Tutkunu · Fikir, kod ve teknoloji Daha fazlası için hakkımda sayfasını ziyaret edebilirsiniz.



Bu yazı hakkındaki görüşünü benimle paylaşmaya ne dersin ?


Email adresiniz yayınlanmayacaktır.

Yorum yap butonuna
  bastıktan sonra yorumunuz gönderilecektir. Yorumunuz incelenip onaylandıktan sonra diğer ziyaretçilerimiz tarafından da görünecektir. Lütfen, yorum yaparken saygı çerçevesinde ve hakaret etmeden yorum yapmaya özen gösteriniz.

Bu yorumu göndererek bu uyarıları okuduğumu ve kabul ettiğimi onaylıyorum.

This site uses Akismet to reduce spam. Learn how your comment data is processed.