Android uygulamaları iki farklı programlama dili ile geliştirilebilmektedir. Bunlardan biri 2020 yılına kadar Google’ın Android uygulama geliştirmede ana programlama dili olarak kabul ettiği Java‘dır. Bir diğeri ve bizim bu kursumuzda kullanacağımız aynı zamanda Google’ın 2020 yılından beri ana programlama dili olarak kabul ettiği Kotlin programlama dilidir. Peki Google ana dili olan 25 yıllık köklü tarihi olan Java’yı niye değiştirdi. Niçin Kotlin’i öncelikli dili olarak seçti?
Ders Başlıkları
Niçin Android Geliştirmede Ana Dil Kotlin?
Kotlin kullanarak uygulama geliştirmenin Java ile geliştirmeye göre bazı olumlu yönleri bulunmaktadır. Daha az kod ile daha fazla iş yapılması gibi, sürekli tekrar eden ve geliştiricileri tekrara düşüren kodları Kotlin ana kütüphanelerinden geliştiricilere sunması gibi. Bu sayede uygulama geliştirme süresini kısaltmaktadır. Aynı zamanda Kotlin’in ana kütüphanesinden kullanılan komutların güvenliği ve performansı konusunda geliştiricinin içi rahatlamış ve tüm topluluk ortak çatı altında buluşmuş oluyor. Kotlin ile Android uygulama geliştirmeye geçen bazı geliştiricilerin geri bildirimlerine dayanarak Google’ın paylaştığı araştırma sonuçlarında, şu olgulara değinilmiş:
- Az ve öz: Daha azıyla daha fazlasını yapabilirsiniz. Kotlin kullanan geliştiricilerin %67’si verimliliklerini arttırdığını söylüyor.
- Daha güvenli kod: Kotlin, “NullPointer Exception” gibi yaygın programlama hatalarından kaçınmanıza yardımcı olacak birçok dil özelliğine sahiptir. Kotlin kodu içeren Android uygulamalarının çökme olasılığı %20 daha azdır.
- Birlikte Çalışabilir: Kotlin’den Java tabanlı kodu çağırın veya Java tabanlı koddan Kotlin’i çağırın. Kotlin, Java programlama dili ile %100 birlikte çalışabilir, bu nedenle projenizde istediğiniz kadar az veya çok Kotlin kullanabilirsiniz.
- Basit Asenkron Kod: Kotlin coroutines ile asenkron kodları senkron kodlar kadar kolay çalıştırabilirsiniz. Coroutines arkaplanda gerekli işlemleri bizim için yürütür. Bu sayede Ağ üzerinden API çağırımları ve yerel veri kaynağında yapılan işlemlerin yönetimi çok kolaylaşır.
Android Temelleri
Bu kurs, programlama deneyimi olmayan kişilere Jetpack Compose ile basit Android uygulamalarının nasıl oluşturulacağını öğretir. Yol boyunca, programlamanın temellerini ve Kotlin programlama dilinin temellerini öğreneceksiniz. Android ile nelerin mümkün olduğunu size göstermeye başlayan bir Android uygulamaları oluşturmak için Android Studio’yu kullanacaksınız.
Android Studio’nun kurulumu için https://developer.android.com/studio sayfasını ziyaret edebilirsiniz.
Kotlin’de ilk Kod
Kotlin’de Android uygulamaları geliştirmeye başlamak için öncelikle Kotlin’de sağlam bir programlama bilgisi temeli oluşturmak önemlidir. Bu yüzden burada uygulama geliştirmeye başlamadan önce, Kotlin programlamanın temellerini öğreneceksiniz.
Ne geliştireceksiniz
- Kotlin’de çalıştırdığınızda mesaj görüntüleyen küçük programlar.
Ne öğreneceksiniz
- Basit bir Kotlin programı nasıl yazılır ve çalıştırılır.
- Çıktıyı değiştirmek için basit bir program nasıl değiştirilir.
Başlangıç
Kotlin’deki basit programları keşfedecek ve değiştireceksiniz. Bir programı, bir bilgisayara veya mobil cihaza, bir kullanıcıya mesaj göstermek veya bir alışveriş sepetindeki öğelerin maliyetini hesaplamak gibi bazı eylemleri gerçekleştirmesi için verilen bir dizi talimat olarak düşünebilirsiniz. Bilgisayarın ne yapması gerektiğine ilişkin adım adım talimatlara kod denir. Bir programdaki kodu değiştirdiğinizde çıktı değişebilir.
Kodunuzu yazmak ve düzenlemek için kod düzenleyici adı verilen bir araç kullanırsınız. Metin yazıp düzenleyebileceğiniz bir metin düzenleyiciye benzer, ancak bir kod düzenleyici ayrıca kodu daha doğru yazmanıza yardımcı olacak işlevsellik sağlar. Örneğin, bir kod düzenleyici siz yazarken otomatik tamamlama önerileri gösterir ve kod yanlış olduğunda hata mesajları görüntüler.
Kotlin dilinin temellerini uygulamak için Kotlin Playground adlı etkileşimli bir kod düzenleyici kullanacaksınız. Bir web tarayıcısından erişebilirsiniz, böylece bilgisayarınıza herhangi bir yazılım yüklemeniz gerekmez. Kotlin kodunu direkt olarak Kotlin Playground içerisinde düzenleyip çalıştırabilir ve çıktısını görebilirsiniz.
Kotlin Playground içinde Android uygulamaları oluşturamayacağınızı unutmayın. Daha sonraki yollarda, Android uygulama kodunuzu yazmak ve düzenlemek için Android Studio adlı bir aracı yükleyecek ve kullanacaksınız.
Başlamaya hazır olduğumuza göre ilk programımıza hadi ilk programımıza bir göz atalım!
Kotlin PlayGround’u aç
Bilgisayarın’daki internet tarayıcısında https://play.kotlinlang.org/ aç.
Aşağıdaki resime benzer bir ekran görüceksin.
Kod düzenleyicisinde bazı kodlar zaten eklenmiş bulunuyor. Bu üç satır kod, basit bir program oluşturur:
fun main() {
println("Hello, world!!!")
}
Daha önce hiç programlama yapmamış olsanız bile, programın ne yaptığını tahmin edebilir misiniz?
Bir sonraki bölüme geçerek tahmininizin doğru olup olmadığını görün!
İlk Programını Çalıştır
Programı çalıştırmak için butonuna basın.
Çalıştır düğmesine tıkladığınızda arka planda çok şey olur. Kotlin programlama dilindeki kod, insanlar tarafından anlaşılmak içindir, böylece insanlar Kotlin programlarını daha kolay okuyabilir, yazabilir ve işbirliği yapabilir. Ancak, bilgisayarınız bu dili hemen anlamaz.
Yazdığınız Kotlin kodunu alan, satır satır inceleyen ve bilgisayarın anlayabileceği bir şeye çeviren Kotlin derleyicisi (Kotlin Compiler) adı verilen bir şeye ihtiyacınız var. Bu işleme kodunuzu derlemek (Compile) denir.
Kodunuz başarıyla derlenirse, programınız çalışır (veya yürütülür). Bilgisayar programınızı çalıştırdığında, talimatlarınızın her birini gerçekleştirir.
İşte programınızı çalıştırdığınızda görmeniz gerekenlerin bir ekran görüntüsü.
Kod düzenleyicinin altında, programınızın çıktısını veya sonucunu gösteren bir bölme görmelisiniz:
Hello, world!!!
Güzel! Bu programın amacı Hello, world!!! yazan bir mesajı yazdırmak veya görüntülemektir.
Bu nasıl çalışıyor? Bir Kotlin programının çalışabilmesi için ana fonksiyona (main function) ihtiyacı vardır. Kotlin derleyicisi (Kotlin Compiler) kodu okumaya ve çalıştırmaya ana fonksiyondan başlar. Yazının devamında derleyici ve fonksiyon terimlerini bazı yerlerde ingilizce karşılıkları olan compiler ve function olarak kullanacağım. Programlama dünyasında bu terimler genelde ingilizce adlarıyla kullanılır.
Main function programın başlangıç noktasıdır ve her Kotlin programında bulunması gerekir.
Şimdi function (fonksiyon) nedir ona bakalım.
Fonksiyonlar
Fonksiyon, belirli bir görevi gerçekleştiren bir programın bir bölümüdür. Programınızda birçok fonksiyona sahip olabileceğiniz gibi tek bir fonksiyona da sahip olabilirsiniz.
Fonksiyonu tanımlama ve çağırma
Kodunuzda önce bir işlev tanımlarsınız. Bu, o görevi gerçekleştirmek için gereken tüm talimatları belirttiğiniz anlamına gelir.
İşlev tanımlandıktan sonra, o işlevi çağırabilirsiniz, böylece o işlev içindeki talimatlar gerçekleştirilebilir veya yürütülebilir.
Fonksiyon nasıl tanımlanır?
Bir fonksiyonu tanımlarken kullanılan 3 kilit nokta vardır:
- Fonksiyonun bir ismi olmalıdır.
- Fonksiyonun girdisi olabilir veya olmayabilir. Bu girdiler fonksiyon tanımlanırken oluşturulmalıdır.
- Fonksiyonun gövdesi olmalıdır. Bu gövde de fonksiyonun gerçekleştereceği görevler tanımlanır. Bu görevler tamamlanınca oluşacak geri dönüş değeri de gövdenin içerisinde tanımlanır.
Kotlin Playground’da gördüğümüz ana fonksiyon örneğinde bir fonksiyonun temel kısımlarını inceleyelim:
- Fonksiyon tanımı “fun” kelimesiyle başlar
- Fonksiyonun adı “main” ‘dir.
- Fonksiyon için girdi yoktur. Bu nedenle girdiler boş parantezden oluşmaktadır.
- Fonksiyon gövdesinde, fonksiyonun açılış ve kapanış süslü parantezleri arasında yer alan println(“Hello, world!!!”) adlı bir kod satırı vardır.
Fonksiyon anahtar kelimesi
Kotlin’de bir fonksiyon tanımlamak üzere olduğunuzu belirtmek için, yeni bir satırda “fun” (fonksiyonun kısaltması) kelimesini kullanın. “fun” tamamen küçük harflerle gösterildiği gibi yazmalısınız. Kotlin derleyicisi ne demek istediğinizi anlayamayacağı için func, function veya alternatif bir yazım kullanamazsınız.
Bu özel kelimelere Kotlin’de anahtar kelimeler denir ve Kotlin’de yeni bir fonksiyon oluşturmak gibi belirli bir amaç için ayrılmıştır.
Fonksiyon adı
Fonksiyonların, insanların kendilerini tanımlamak için isimlere sahip olmalarına benzer şekilde, birbirlerinden ayırt edilebilmeleri için isimleri vardır. İşlevin adı fun anahtar sözcüğünden sonra bulunur.
Fonksiyonun amacına göre fonksiyonunuz için uygun bir ad seçin. İsim genellikle bir fiil veya fiil cümlesidir. Fonksiyon adı olarak bir Kotlin anahtar sözcüğü kullanmaktan kaçınılması önerilir.
Fonksiyonlar isimlendirilirken yazılım dünyasında yaygın olarak tercih edilen camel case notasyonu denilen isimlendirme notasyonu kullanılması önerilir. Başka popüler notasyonlarda vardır. Fakat Android kodlamada Google mühendisleri de bu notasyonu kullanır.
Camel case notasyonu
Fonksiyon adının ilk kelimesi tamamen küçük harflidir. Birden fazla kelimeden oluşuyorsa devam eden kelimelerin sadece ilk harfleri büyük harf ile yazılır. Kelimeler arasında bosluk ve ya baska bir sembol olmaz.
Örnek fonksiyon isimleri:
- faturaHesapla
- hataMesajiGoster
- yeniKullaniciKaydet
Kod yazarken ingilizce harfler kullanılır, “ş, ö, ı” gibi harfler kullanılamaz. Bundan dolayı fonksiyon adı oluştururken Türkçe harf kullanmayınız. Alışkanlık olması için ve kurumsal işlerde daha rahat çalışabilmek için ingilizce kelimelerden fonksiyon isimleri oluşturmanızı tavsiye ederim.
- displayErrorMessage
- saveNewUser
- calculateInvoice
Fonksiyon girdileri
Fonksiyon girdileri her zaman parantez içerisine yazılır. Birden fazla girdi var ise “,” (virgül) ile ayrılır.
Girdiler, fonksiyonun işlemleri yerine getirmesi için gerekli zorunlu kod parçalarıdır. Girdiler boş bırakılmak istenirse. boş parantez olarak geçilir.
Girdilerin kullanımını örnekler ile inceleyelim.
Aşağıdaki diyagram, birEkle isimli bir fonksiyonu göstermektedir. Fonksiyonun amacı verilen sayıya bir eklemektir. Sayı olan bir girdi değeri vardır. Fonksiyon gövdesinin içinde verilen sayıya bir ekleyen kod vardır.
Sonraki örnekte, tamAdiGoster isimli bir fonksiyon vardır. Fonksiyon için gerekli iki girdi vardır. Biri ad için, biri soyadı için. Fonksiyon gövdesi, kişinin tam adını görüntülemek için, çıktı olarak adı ve soyadı yan yana yazdırır.
Fonksiyon gövdesi
Fonksiyon gövdesi, fonksiyonun amacına ulaşmak için talimatları içerir. Fonksiyon gövdesini açık ve kapalı süslü parantezler ({…}) arasında tanımlarız.
Örnek programı inceleyelim
Daha önce gördüğümüz basit örneğimize bir bakalım.
Bu program bir fonksiyon içerir: main (ana) fonksiyon. main Kotlin’de özel bir fonksiyon ismidir. Kod yazarken kodların main() fonksiyonu içerinde yazılması veya buradan çağırılması gerekmektedir.
Örnekte main() fonksiyon içerisinde sadece bir satır kod var.
println("Hello, world!!!")
Bu satır belirli bir eylemi gerçekleştirir. Çıktı bölmesine Hello, world!!! yazılmasını. println() Kotlin mühendisleri tarafından daha önceden tanımlanmış bir fonksiyondur. Amacı ise girdi olarak gönderilen veriyi çıktı bölmesine yazdırmaktır. Bu durumda tırnaklar (“”) arasında verilen mesaj, çıktı bölmesine yazdırılmış olur.
Hello, world!!!
Sen dene
Şimdi programdaki orijinal koda tekrar bakın. Çıktının “Hello, world!!!” yerine aşağıdaki mesajı göstermesi için Kotlin Playground’daki kodu değiştirebilir misiniz?
Merhaba, Android!
Programını değiştir
- Çıktıda görüntülenen mesajı değiştirmek için, programın ikinci satırındaki println() fonksiyon çağrısını değiştirin. println() fonksiyonunda Hello, world!!! yazısını Merhaba, Android! ile değiştirin. “Merhaba, Android!” hala tırnak içinde ve parantez içinde olduğundan emin olun.
fun main() {
println("Merhaba, Android!")
}
- Programı çalıştırın.
- Çıktıda bu mesaj görülmeli.
Merhaba, Android!
Tebrikler, ilk programını oluşturdun!
Şimdi, mesajın iki kez yazdırılması için kodunu değiştirebilir misin? İstenen çıktıya bir bak:
Merhaba, Android!
Merhaba, Android!
Birden fazla mesaj yazdırma
Bir fonksiyonun içine ihtiyaç duyulan sayıda kod yazılabilir. Ancak, Kotlin’de her satırda yalnızca bir ifade olması gerektiğini unutmayın. Başka bir ifade yazmak istiyorsanız, onu fonksiyonun yeni bir satırına yazın.
Programı birden fazla metin satırı yazdıracak şekilde değiştirmek için:
- İlk println() ifadesini kopyalayın ve altındaki ikinci ifadeyi fonksiyon gövdesine yapıştırın. Her iki println() ifadesi de ana fonksiyon (main function) süslü parantezleri içinde yer almalıdır. Artık fonksiyon gövdesi içinde iki ifadeniz var.
fun main() {
println("Merhaba, Android!")
println("Merhaba, Android!")
}
- Programı çalıştırın.
- Çıktıda bu mesaj görülmeli.
Merhaba, Android!
Merhaba, Android!
Kodda yapılan değişikliklerin çıktıyı nasıl etkilediğini görebilirsiniz.
- Kodu, Merhaba, SENİN_ADIN! yazacak şekilde değiştirip örnekleri çoğaltabilirsiniz.
Koddaki hataları ayıklama
Tıpkı insan dilinde olduğu gibi programlama dillerinde de bazı gramer kuralları vardır. Kodun derleyici tarafından anlaşılabilir olması için, kurallara uygun ve geçerli dilde yazılmış olması gereklidir.
Kodlama ve uygulama geliştirme süreci, hata yapmayı ve bu hataları ayıklayıp çözmeyi içerir. İyi bir yazılımcı olabilmek için bu hataları çözmeyi öğrenmek gerekir. Kodlamaya yeni başlayan biri olarak bu hatalarla boğuşmak can sıkıcı gelebilir. Fakat ümitsizliğe kapılma ilk yazıldığında hatasız çalışan kod neredeyse yoktur. 🙂
Eğer kod başarıyla derlenmezse bir hata var demektir. Örneğin, çağırdığını fonksiyonun adını yanlış yazmış olabilirsiniz veya açtığınız parantezlerden biri kapatmayı unutmuş olabilirsiniz. Bunları kod geliştirme editör’ünüz(IDE) ile kontrol edip hatayı en aza indirebilirsiniz. Fakat hata bir kez oluştuysa, derleme işlemlerindeki çıktıları okuyarak hatanın nerede ve neden kaynaklandığını anlayabiliriz.
- Aşağıdaki örneği Kotlin Playground’a kopyalıp, çalıştırın. Bakalım çıktı olarak ne göreceksiniz.
fun main() {
println("Bugün güneşli!)
}
Normalde, Bugün güneşli mesajı çıktı olarak görüntülenmeliydi. Bunun yerine, çıktı bölmesinde hata mesajları içeren ünlem işareti simgeleri gördünüz.
Hata mesajları “Expecting” kelimesiyle başlar çünkü Kotlin derleyicisi bir şeyi “bekliyor”(Expecting) ama kodda bulamıyor. Bu durumda derleyici, programınızın ikinci satırındaki kod için bir kapanış tırnak işareti ve bir kapanış parantezi beklemektedir.
println() satırında, görüntülenecek mesajın açılış tırnak işaretine sahip olduğuna, ancak kapanış tırnak işareti olmadığına dikkat edin. Kodda bir kapanış parantezi olmasına rağmen, derleyici parantezin yazdırılacak metnin bir parçası olduğunu düşünür çünkü ondan önce kapanış tırnak işareti yoktur.
- Kapanış parantezinden önce, ünlem işaretinden sonra kapanış tırnak(“) işaretini ekleyin.
fun main() {
println("Today is sunny!")
}
main fonksiyon, metnin tırnak işaretleri içine alındığı ve parantez içine alındığı bir println() ifadesi olan bir kod satırı içerir: ”Bugün güneşli!”.
Programı tekrar çalıştırın.
Herhangi bir hata olmamalı ve çıktı bölmesi şu metni göstermelidir:
Today is sunny!
Hatayı çözdünüz, tebrikler!
Bir sonraki bölümde, öğrendiklerinizi uygulamak için bir dizi alıştırma üzerinde çalışacaksınız. Çözümler eğitimin sonunda yayınlanır, ancak yanıtı önce kendi başınıza bulmak için elinizden gelenin en iyisini yapın.
Alıştırmalar
- Bu programdaki kodu okuyup çıktısının ne olduğunu (Kotlin Playground’da çalıştırmadan) tahmin edebilir misiniz?
fun main() {
println("1")
println("2")
println("3")
}
Bir tahmininiz olduğunda, cevabınızı kontrol etmek için bu kodu kopyalayıp Kotlin Playground’a yapıştırın.
- Aşağıdaki mesajları veren bir program oluşturmak için Kotlin Playground’u kullanın:
Ben
Kotlin
öğreniyorum!
- Bu programı kopyalayıp Kotlin Playground’a yapıştırın.
fun main() {
println("Salı")
println("Perşembe")
println("Çarşamba")
println("Cuma")
println("Pazartesi")
}
Programı şu çıktıyı yazdıracak şekilde düzeltin:
Pazartesi
Salı
Çarşamba
Perşembe
Cuma
Sorun gidermeyle ilgili bazı uygulamalar için, aşağıdaki alıştırmalardaki hataları düzeltin. Her alıştırma için kodu tarayıcınızdaki Kotlin Playground’a kopyalayın. Programı çalıştırmayı deneyin ve bir hata mesajının göründüğünü göreceksiniz.
- İstenen çıktıyı üretmesi için bu programdaki hatayı düzeltin.
fun main() {
println("Yarın yağmurlu olacak")
İstenen çıktı:
Yarın yağmurlu olacak
- İstenen çıktıyı üretmesi için bu programdaki hatayı düzeltin.
fun main() {
printLine("Kar yağma ihtimali var")
}
İstenen çıktı:
Kar yağma ihtimali var
- İstenen çıktıyı üretmesi için bu programdaki hatayı düzeltin.
fun main() {
println("Bulutlu") println("Parçalı Bulutlu") println("Rüzgarlı")
}
İstenen çıktı:
Bulutlu
Parçalı Bulutlu
Rüzgarlı
- İstenen çıktıyı üretmesi için bu programdaki hatayı düzeltin.
fun main() (
println("Bugün hava nasıl?")
)
İstenen çıktı:
Bugün hava nasıl?
Bu alıştırmaları tamamladıktan sonra, cevaplarınızı bir sonraki bölümdeki çözümlerle karşılaştırın.
Çözümler
- Programın çıktısı şu şekildedir:
1
2
3
- Programınızdaki kod şöyle görünmelidir:
fun main() {
println("Ben")
println("Kotlin")
println("Öğreniyorum!")
}
- Bu program için doğru kod aşağıdaki gibidir:
fun main() {
println("Pazartesi")
println("Salı")
println("Çarşamba")
println("Perşembe")
println("Cuma")
}
- Main fonksiyon için fonksiyon gövdesinin sonunu gösteren kapanış süslü parantezi programın üçüncü satırında eksik.
Doğru kod:
fun main() {
println("Yarın yağmurlu olacak")
}
- Programı çalıştırdığınızda bir Unresolved reference: printLine hatası görürsünüz. Bunun nedeni, printLine()‘ın Kotlin’de tanınan bir fonksiyon olmamasıdır. Kodun hataya neden olan kısmını Kotlin Playground’da kırmızıyla vurgulanmış olarak da görebilirsiniz. Hatayı düzeltmek için println() olarak değiştiriniz.
Doğru kod:
fun main() {
println("Kar yağma ihtimali var")
}
- Bu koda yakından bakıldığında tüm fonksiyonların tek satırda çağırıldığını görürsünüz. Kotlin’de her fonksiyon ayrı satırda çağırılmalıdır. println()‘leri yeni satırlara bölmek sorunu çözecektir.
Doğru kod:
fun main() {
println("Bulutlu")
println("Parçalı Bulutlu")
println("Rüzgarlı")
}
- Programı çalıştırırsanız şu hatayı görürsünüz: ‘main’ fonksiyonun bir gövdesi olmalıdır. Bir fonksiyon gövdesi, açılıp kapanan parantezler ( ) değil, açılan bir süslü parantez ve kapanan bir süslü parantez { } içine alınmalıdır.
Doğru kod:
fun main() {
println("How's the weather today?")
}
Sonuç
Kotlin’e girişi tamamlayarak harika bir iş çıkardın!
Kotlin’de program yazarak, çıktı bölmesinde metni nasıl göreceğin üzerinde çalıştın. Programları farklı şekillerde değiştirdin ve bu değişikliklerin nelere etki edeceğini gözlemledin. Programlama sırasında hata yapıldığında bu hataları nasıl çözeceğini deneyimledin ve hatalarını gidermeye başladın.
Daha ilginç programlar oluşturabilmeniz için Kotlin’de değişkenleri nasıl kullanacağınızı öğrenmek için bir sonraki derse geçin!
Özet
- Bir Kotlin programı, programın giriş noktası olarak bir “main” fonksiyon gerektirir.
- Kotlin’de bir fonksiyon tanımlamak için fun anahtar sözcüğünü yazın, ardından fonksiyonun adını girin, tüm girdileri parantez içine alın ve ardından süslü parantezler içine alınmış fonksiyon gövdesini kullanın.
- Bir fonksiyon adı “Camel Case” kuralına uygun olmalı ve küçük harfle başlamalıdır.
- Çıktıya bir metin yazdırmak için println() fonksiyon çağrısını kullanın.
- Hata ayıklama, kodunuzdaki hataları çözme işlemidir ve kod yazma sürecinin kaçınılmaz bir parçasıdır.