Kotlin’e Giriş 2- Control Flows(Karar Yapıları)

Muhammed Burak Çakır
Android Türkiye
Published in
4 min readFeb 16, 2020

Merhabalar, Kotlin’e Giriş serimize Control Flows ile devam ediyoruz.

Serinin ilk yazısına buradan ulaşabilirsiniz : Kotlin’e Giriş 1- Basic Types

Control Flows

Control Flowlar, bir şarta göre, belirli bir sayıda çalıştırmak istediğimiz kod bloklarıdır.

  • Örneğin, kişilerin bilgilerini okuyan bir fonksiyonumuz olsun, listedeki kişi sayısı kadar çalışan bir döngüyle bu işlemi yapsın.
  • Programımızda bir yapının kaç defa çalıştığını bir sayaç ile öğrenmek isteyebiliriz.

Bu durumlarda, Control Flowlar kullanılabilir.

If Expression

Kotlin’de if blokları, state ve expression olarak 2 farklı durumda yazılabilir.

State kullanımı, Java’da olduğu gibi şartlara göre if else bloklarımızı yazmakla aynıdır.

Expression kullanımında, if else bloklarından dönen değer bir değişkene atanabilir.

Expression kullanımında, else bloğu zorunludur. Çünkü else bloğu yazılmadığında ve if sağlanmadığında, değişkene dönecek bir değer yoktur.

Java’da, if-else bloklarında ternary operator kullanabiliyorduk. Ternary operator, if-else kullanımının basitleşmiş halidir.

boolean isStudent = true;
boolean isEmployee = false;
boolean boolResult = (isStudent && isEmployee) ? true : false;
System.out.println(boolResult); // çıktı : false

Burada (isStudent && isEmployee)’den dönen sonuca göre true veya false çıktısı belirtilir.

Kotlin’de ternary operator yoktur, çünkü zaten expression kullanımı mevcuttur.

Else-If Expression

If kullanımında, şartlardan biri sağlansa da, diğer şartlar kontrol edilir.

Else-if kullanımında, eğer verilen şartlardan biri sağlandıysa, diğer şartların kontrolü yapılmaz.

  • İlk adımda, ilk if bloğu çalıştırılır ve sayının (40,50) aralığında olmadığı farkedilip alttaki else-if bloğuna devam edilir.
  • İkinci adımda, sayının (50,60) aralığında olmadığı farkedilip bir alt satırdaki else-if bloğu çalıştırılır.
  • Üçüncü adımda, Sayı (60,70) aralığını sağladığı için, blok içine girilir. Şart sağlandığı için diğer else-if durumlarına bakılmaz.

else if yerine sadece if kullansaydık, tüm şartlara bakacaktı.

When Expression

When, Java dilinde kullandığımız switch-case yapısına denk gelmektedir.

Condition(Koşul/Şart) belirtildikten sonra, lambda operatörü kullanılır.

When ifadesi, if-else ifadeleri gibi expression şeklinde kullanılabilir.

Else’de kullandık. Çünkü expression kullanımında else ifadesini kullanmamız da gerekiyordu.

Birden çok durumda aynı kodun çalışmasını istiyorsak, onları comma(virgül) operatörü ile ayırabiliriz.

When, karşılaştırma ifadesi eklenmeden de kullanılabilir.

is ve is! Operatörleriyle, gönderilen argümanın Class referansı olup olmadığı kontrol edilebilir.

Range

When, For döngüleri Range yapılarıyla sıkça kullanılmaktadır. Detayına girmeden, nasıl kullandığı hakkında bilgilendirme yapmak istiyorum.

Range, verilen tipte sınırlı aralıklar oluşturmamızı sağlar.

Örneğin, küçükten büyüğe değerler alan bir aralık oluşturmak için

  • “..” veya
  • rangeTo operatörü kullanılabilir.
val numbers = 1..100 // [1,100]
val numbers2 = 1.rangeTo(100) // [1,100]

Ayrıca, until fonksiyonu ile de aynı işlemler yapılabilir. Bu durumda, son değer dahil edilmez.

Char değerlerden oluşan bir aralık tanımlanabilir. Türkçe karakter içermez.

val alphabet = 'A'..'Z'

Aralığı, büyükten küçüğe değerlerle doldurmak istersek, downTo fonksiyonu devreye girer.

When ile Range kullanımlarını örnekleyerek gösterelim.

For Loops

For döngüleri, bloklar içine yazılmış kodun, verilen boyut kadar tekrar etmesi için kullanılır.

Örneğin, 1’den 10’a kadar olan sayıları yazdıralım.

Burada, value değişkenine; 1’den 10’a kadar olan sayılar tek tek atanarak blok içinde işlem yapılır.

Böyle basit bir kullanım için, repeat() fonksiyonuda kullanılabilir.

Bir listenin içindeki elemanlara ulaşmak istiyorsak :

  • “value in list” yapısı kullanılır.

default kullanımda, direk değere erişebiliriz.

Bir listenin içindeki index’e ulaşmak istiyorsak:

  • “index in list.indices” yapısı kullanılır.

Bir listenin içindeki elemanlara ve indexlere beraber ulaşmak istiyorsak :

Böylece, ${countryCodeArray[index]} yerine, $value yazmamız yeterli oldu. Kendi elimizle index verip değere ulaşmak yerine, for döngüsüyle gelen değeri kullandık.

While Loops

While döngüleri, diğer dillerde ki mantık ile çalışır. Verilen şart sağlanırsa kod bloğuna girilir.

  • Her değerde şartı kontrol etmek istiyorsak while,
  • Bir kez çalışması kesin olarak kodu kontrol etmek istiyorsak do while kullanırız.

Burada, sayı en başta 4 iken while içine girecek, 1 artacak.

Tekrar girdiğinde ise 5'ten küçük şartını sağlamadığı için while döngüsünün içine girmeyecektir.

Do while’da ise, kontrolden önce do bloğuna gireceği için, while şartından bağımsız olarak 1 kez çalışır.

Sonra while kontrolü sağlanıyorsa, do bloğu çalışmaya devam eder. Aksi durumda, döngüden çıkılır.

Break and continue in loops

Döngülerde belirli kurallar gerçekleştiğinde, döngünün bitmesini veya en başa gelmesini isteyebiliriz. Bu durumlarda continue ve break kullanırız.

  • Continue : Kullanıldığı döngüye dönüş yapar, tekrardan çalışmaya başlar.
  • Break : Kullanıldığı döngünün çalışmasını sonlandırır.

Burada, 2 ile bölününce 1 kalanını veren sayılar( tek sayılar ) koşulu sağlandığında continue komutuyla karşılaşıldığı için, print komutu çalışmadan for komutuna geri döner. Böylece sadece çift sayılar ekrana bastırılır.

Burada ise, value == 24 olduğu durumda break komutu çalışacağı için for döngüsü tamamen sonlanır. value = 24 olduğu halde break ile döngüden çıktığımız için ekrana en son 22 yazdırılır.

İç içe for kullanımında ise, komutların içlerinde oldukları for yerine, diğer for döngülerine ulaşmasını isteyebiliriz.

Burada “@returnLabel” belirteçi ile, continue durumunda içteki for yerine, daha dıştaki for döngüsüne gitmek istediğimizi söyleriz.

C dillerinde eskiden kullanılan “goto” yapısına benzediğini söyleyebiliriz.

Bir sonraki yazım Fonksiyonlar hakkında olacak. Java’dan Kotlin’e geçtiğimizde, fonksiyonel programlamayla tanıştığımız fonksiyonların geniş dünyasını tanımamız gerekli. :)

Faydalı olması dileğiyle. :)

Kaynaklar :

1- Kotlinglang

2- Codemy Github

3- Kapak görseli : Discover SDK

--

--