Android geliştiricileri için Kotlin’i sıfırdan tanıtmama gerek yok diye düşünüyorum. Çünkü 2017’de Google, Android geliştirme için resmi dilin Kotlin olacağını duyurmuştu. Kotlin, o zamandan beri, yeni ve yaratıcı Android uygulamaları geliştirmek için birincil dil seçeneği olarak büyük ilgi gördü. Kotlin, Java’da karşılaştığımız birçok sorunu çözebiliyor. Bu nedenle yeni uygulamalar çoğunlukla Kotlin ile yazılmaya başlandı.

Hiç şüphe yok ki uygulamaların ara yüzünde ve kullanıcı taraflı tasarımlar konusunda Kotlin gerçekten harika ve Kotlin’den ilk bahsettiğinizde çoğu insan bunu Android işletim sistemi ile ilişkilendiriyor. Ancak bu yazımda bir back-end dili olarak Kotlin’den bahsedeceğim. Anlatırken sizlere Android için geliştirilen bir projeden örnekler vereceğim. Ancak bu makalenin kapsamı dışında olduğu için projenin ne hakkında olduğunu anlatmama şimdili gerek yok. Bunun yerine, Kotlin’i neden seçebileceğimizi ve bunun sunucu tarafı uygulamaları veya REST API’leri yazmak için neden harika bir dil olduğunu açıklamaya odaklanacağım. Hadi başlayalım:

Neden Kotlin?

Biraz kendimden bahsetmeme izin verin. Her zaman girişimcilik hırslarım vardı ve bu yoldaki ilk adımın kendi başıma bir şeyler yaratmak olduğunu düşündüm. Büyük bir şey değil, dünyayı değiştirmeme de gerek yok, sadece benim ve belki ailemin ve arkadaşlarımın  kullanabileceği küçük bir şey (elbette dünya değiştirme fikri hiçte fena olmazdı). Makul bir fikir edindikten sonra hemen planları yaptım ve uygulamaya başladım. Herhangi bir projenin başında yaptığınız ilk şey, araçlarınızı seçmektir. Sonuçta, doğru araç seti size uzun vadede çok fazla zaman ve para kazandırabilir. Ben de öyle yaptım.

Aslında kötü sayılabilecek düzeyde bir Java geliştiricisiydim. Java ve Spring kullanarak birkaç arka uç sistemi ve REST API yazdım ve bu ikisinin böyle şeyler yapmak için harika araçlar olduğunu düşünüyorum. Java başlı başına kapsamlı bir dil, ancak Spring ile birlikte uygulayamayacağınız hiçbir şey yoktur.

Ancak yine de başınızı ağrıtmaya yetecek küçük bir husus var.  Ayrıntılar!. Spring ve Java’nın en son sürümleri bu konuda büyük ölçüde yardımcı olsa da, yine de birçok standart kodla uğraşmanız gerekiyor. Bir zamanlar gerçekten iyi olduğuna inandığım bir adamın söylediği gibi – en güvenli, en güvenilir ve hatasız kod, yazılmayan koddur-. Örneğin, bu önemsiz Java sınıfını ele alalım:

Bana göre bu, “İki salt okunur alanı olan bir sınıf istiyorum” demek için burada çok fazla kod var. En kötü yanı, kurucu ve yöntemlerin otomatik olarak oluşturulmuş olmasıdır. Yine de, bir çekme talebini incelerken, her zaman onlardan geçersiniz. Çünkü, neye ihtiyacınız olduğunu asla bilemezsiniz. Elbette bu, Lombok gibi üçüncü taraf kitaplıklarla kısaltılabilir. Peki Kotlin nasıl çalışıyor?

Şimdi bir de Kotlin’de aynı sınıfı görelim:

Sanırım demek istediğim anlaşılmıştır. Kesinlikle daha kısa ve daha basit. Val anahtar sözcüğünü kullandığımız için değişkenler kesindir; yapıcı ve alıcılar derleme zamanında oluşturulur. Değişmez bir kişi nesnesine sahip olmak istemezseniz, cevap yine basit. val yerine var kullanabilirsiniz. Tek yapmanız gereken basit bir harfi değiştirmek.

equals() ve hashCode() olaylarını ele alalım. Bunlar çoğu zaman yeniden otomatik olarak oluşturulur, yine de emin olmak için her zaman bunların üzerinden geçmeniz gerekir. İyi haber şu ki Kotlin bunu da halledebilir. Sınıfınızı bir veri sınıfına dönüştürmeniz yeterlidir.

Kısacası Java’yı sevmeme rağmen kısa sürede proje yaratabilmek için minimum uygulanabilir bir ürün oluşturmak isteyebilirsiniz. Yazılım geliştirme söz konusu olduğunda, bunu başarmanın en basit yolu daha az kod yazmaktır. Bu fikirler ile düşünerek arka uç geliştirme için daha iyi bir dil arayışıma devam ettim. Önce Node.js’ye geçtim. Birkaç satırdan sonra Express sunucunuz hazır ve çalışır durumda olabiliyor. 8080 numaralı bağlantı noktasında Hello World ile yanıt veriyor!

Kolay, basit ve hızlı. Tam da piyasadaki en popüler programlama dillerinden birinden beklediğiniz gibi. JavaScript ile çalışmaktan zevk alıyorum ve kısa bir süre için doğru aracı bulduğumu düşündüm, ancak daha sonra JavaScript’in dinamik olarak yazılmış olması beni rahatsız etti. Beni yanlış anlamayın, dinamik yazmanın ön uçta harika olduğunu düşünüyorum, ancak deneyimlerime göre, statik olarak yazılan bir arka uca sahip olmak, tür uyuşmazlıkları nedeniyle sunucunuzun çalışma zamanında çökme olasılığının daha düşük olduğu konusunda ekstra güven veriyor. Ve burada dürüst olalım, arka ucunuz birkaç yüz bin kullanıcıya hizmet veriyorsa, bunun olmasını gerçekten istemezsiniz.

Bu gereksinimleri göz önünde bulundurarak, Kotlin’i tercih ettim.

Kotlin: Genel Bakış

Daha önce hiç duymamış olanlar için Kotlin, hem nesne yönelimli hem de işlevsel programlamayı destekleyen açık kaynaklı, statik olarak yazılmış bir programlama dilidir. C#, Java veya Scala gibi benzer sözdizimi ve kavramlar sağlar ve esas olarak JVM’yi hedefler, ancak aynı zamanda JavaScript veya yerel kodu hedefleyen varyantlara sahiptir. Kotlin/JVM’nin Java bayt koduna göre derlenmesi Java’ya çok benzer, bu nedenle JVM geçmişi olan arka uç mühendisleri için Kotlin’i kavramak kolay olacaktır.

Kotlin’in resmi internet sitesine buradan ulaşabilirsiniz.

Herhangi bir Java IDE veya komut satırı ile rahatlıkla kullanabilirsiniz. Ancak bana soracak olursanız size, IntelliJ kullanmanızı tavsiye edebilirim. JetBrains tarafından aktif olarak güncelleniyor. Ücretli sürümü satın almanıza gerek yok. Kotlin ile yeni başladıysanız, IntelliJ’in topluluk sürümü tüm ihtiyaçlarınızı karşılayacaktır.

Kotlin’in belirtmek istediğim çok önemli üç yönü var:

  • standart kodu büyük ölçüde azaltır
  • güvenli, boş işaretçi istisnalarından kaçınmak için oluşturulmuştur
  • JVM, Android veya tarayıcı için mevcut kitaplıklardan yararlanabilirsiniz

Kotlin Coroutines Nedir?

Hepimiz, kullanıcılarına hızlı hizmet veren sistemlere sahip olmak istiyoruz. Sunucunuzun maksimum kapasitesine ulaşmak için yapabileceğiniz ilk şey çok iş parçacıklı bir uygulamaya sahip olmaktır. Java bu konuda oldukça külfetli. Java’yı öğrendiğinizde, önce çok iş parçacıklı bir uygulama istiyorsanız, Thread sınıfını genişletmeniz veya Runnable arabirimini uygulamanız gerektiğini öğrenirsiniz. Yeni başlayanlar farkın ne olduğunu tam olarak anlayamayabilirler. Sonuç olarak bir iş parçacığı başlatmak, çok pahalıdır.  Bunun yerine bir iş parçacığı havuzu kullanmanız daha iyi bir çözüm olacaktır.

Neyse ki, Kotlin’in Coroutines adı verilen daha da basit bir çözümü var. Temel fikir, askıya alınabilen işlevlere sahip olmaktır; başka bir deyişle, hesaplama bir noktada askıya alınabilir ve daha sonra devam ettirilebilir. En iyi bölüm, kod yazarken, programlama modelinin gerçekten değişmemesidir. Bu nedenle engellemeyen kod yazmak, engelleme kodu yazmakla aynıdır. Bunu bir örnekle incelememiz iyi olur:

Bu örnek bir engelleme işlevini göstermektedir. Bu kod parçacığını çalıştıran iş parçacığı, işlev dönene kadar başka bir iş yapmayacaktır; bu, bir API veya veritabanı çağrısı durumunda birkaç saniye sürebilir. Başka bir hizmeti beklerken iş parçacığımızı gerçekten engellemek istemiyoruz, bu yüzden bu işlevi engellemeyen bir işlev haline getirelim.

Bu örnek, yöntemimizi nasıl askıya alınabilecek, engellemeyen bir işleve dönüştürebileceğimizi göstermektedir. Bu, 10 saniyelik ağır iş basit bir delay() işlev çağrısıysa, yürütme iş parçacığı o süre boyunca diğer görevler üzerinde çalışacak ve 10 saniye geçtikten sonra da işlevin yürütülmesine devam edecek anlamına gelir. Bu harika değil mi? Engellemeyen bir kod tek bir anahtar kelimeyle elde edildi.

Ktor ile Eşzamansız Hizmet

REST API’leri yazmaya gelince, gömülü bir sunucuyu başlatmak veya isteği ayrıştırmak gibi bir kişinin atması gereken bazı ekstra adımlar vardır ve elbette kimse bunu manuel olarak yapmak istemez. Java, işleri gerçekten kolaylaştıran Spring Boot’a sahiptir ve neyse ki Kotlin’in Ktor adında bir çerçevesi vardır. Ktor, eşzamansız sunucular oluşturmak için bir web çerçevesidir. Kullanımı gayet kolaydır. Bunu da bir örnek üzerinde görelim:

Yukarıdaki örnek, gömülü bir Tomcat sunucusunda çalışan, 8080 bağlantı noktasını dinleyen ve “Hello World!” ile eşzamansız olarak yanıt veren, tamamen işlevsel bir Kotlin Ktor sunucusunu göstermektedir. Ve tüm bunlar 10 satırdan daha az bir kod ile mümkün olabiliyor.

Açıkçası Ktor bundan çok daha fazlasını yapabilir. Ktor’un sunucu tarafında neler yapabileceği ve bunun nasıl yapılandırılacağı hakkında daha fazla bilgiyi buradan okuyabilirsiniz.

Arka Uçta Kotlin’in Diğer Faydaları

Belirtmek istediğim ilk fayda, Kotlin’de Java kitaplıklarını kullanabiliyor olmanız. Java için hayatınızı kolaylaştıracak birçok harika üçüncü taraf kitaplığı var. İşi mükemmel şekilde yapan açık kaynaklı, kullanıma hazır bir kitaplık varken neden baştan uğraşmanıza gerek kalmaz. Bunları Kotlin ile kullanırken kusursuz çalıştıklarını görebilirsiniz.

Kotlin ve Ktor’un bir diğer önemli avantajı, kullanabileceğiniz kapsamlı test kitaplıkları ve çerçeveleridir. Junit çerçevesi, Kotlin ile bir harika çalışır ve Ktor, bunun üzerine, uçtan uca testler ve entegrasyon testleri yazmanıza izin veren kendi test kitaplığını ekler. Tüm uygulamanızı çalıştıracak ve canlı uygulamanın yapacağı gibi istekleri işleyebilecek özel bir test motoru kullanabilirsiniz.

Sonuç Olarak

Kotlin’in sitesinde belirtildiği gibi, Kotlin’in amacı benzersiz olmak değildir. Uygulama ve arka uç geliştirme konularında, Kotlin, Coroutines ve Ktor’un bu işi yapmak için harika bir üçlü oluşturduğunu söylemem gerekiyor.

 

Kesinlikle ön uç veya arka uç olarak sınıflandırılabilecek birkaç programlama dili olsa da, Kotlin, arka uç programlamada kullanımı kolaylaştıran statik yazım gibi özelliklere sahiptir.

Coroutines gibi yüksek performanslı özellikler ve Java kitaplıklarından yararlanma yeteneği sayesinde Kotlin, arka uç geliştirme için mükemmel bir seçenektir.

Coroutines, çalıştırılabilir ve askıya alınabilir olan iş parçacıklarıdır. Uygulamaların aynı anda birden fazla kullanıcı aktivitesini yönetmesine yardımcı olurlar.

 

Buraya kadar bana eşlik ettiğiniz için teşekkür ederim. Kendinize iyi bakın!

Paylaşmak İster Misiniz?