Kotlin’de Kontrol Yapıları (if ,when, for, while) ve Range

Ecem Aleyna Süren
3 min readFeb 14, 2020

--

Merhaba,

Bu yazımda programlamanın olmazsa olmazları olan kontrol yapılarından bahsedeceğim. Her programlama dilinde olduğu gibi, bu yapılar Kotlin’de de önemli bir yer teşkil etmektedir.

Kontrol yapıları; tekrar eden işlemlerin daha düzenli ve sistematik yapılmasını sağlayan yapılardır.

Şimdi bu kontrol yapılarına bakalım.

If else

If else yapısı; eğer bir koşul sağlanacaksa if bloğuna gir, koşul sağlanmayacaksa else bloğuna gir demektir. 2 çeşit if else kullanımı vardır

State Kullanımı: Normal If else yapısıdır. Bir şartı sağlıyorsan o kod bloğu’unun içini yap, sağlamıyorsan else bloğu’nun içini yap demektir.

Yukarıdaki kodda kullanıcıdan 2 sayı girmesi isteniyor. Kullanıcının girdiği sayılara göre; eğer sayı2 sayı1 den büyükse if şartı, sayı1 sayı2 den büyükse else şartı çalışacaktır.

Expression kullanımı: Expression kullanımı bir değer döner. Bir değişken tanımlanıp, if şartı ona eşitlenir. Eğer bu bir blok içerisindeyse , bu bloğu’un son satırı değişkene değer olarak atanır. Kotlin’de Expression kullanımı olduğu için, Java’daki gibi ternary operatörü yoktur. Ayrıca expression kullanımı yapılacaksa, else case’i kullanmak zorunludur. Çünkü değişkene bir değer atanması zorunludur. Eğer case’lerin hiçbiri değer döndürmezse else case’i bir değer döndürecektir.

Aşağıda if’in Expression kullanımına örnek bir kod yer almaktadır.

Örneğin 2 farklı değişken tipi karşılaştırılacağı zaman, tipler aynı olmadığı için değerler aynı olsa bile hata verecektir. Çünkü equals methodu önce tipleri karşılaştırmaktadır. Tipler aynı olmadığı için karşılaştırma yapılamayacaktır.

Eğer birden fazla şartlı durum varsa bu durumları if else şeklinde yazmak, tek tek if şeklinde yazmaktan daha iyi sonuç verecektir. Çünkü, if else durumunda doğru case bulunduğunda diğer şartlar kontrol edilmez ancak if durumunda doğru case bulunsa bile bütün şartlar bitene kadar kontrol edilir.

Aşağıdaki kodda bütün if şartları kontrol edilecektir ve bu durum performans sorununa yol açacaktır.

When

When yapısı Java’daki switch- case yapısına karşılık gelmektedir. İf- else ile yapılabilen her şey when yapısı ile yapılabilir. İf-else’e göre daha kolay bir kullanımı vardır.

Yukarıdaki kodda; kullanıcıdan bir plaka kodu girmesi istenir. Kullanıcı kodu girdiğinde when loop’unda plakalar eşlenip ilgili şehir ismi kullanıcıya gösterilecektir.

When’de de if else’lerde olduğu gibi expression kullanımı yapılabilir. Yine burada da else case’ini kullanmak zorunludur ve bloğu’un son satırı değişkene değer olarak atanır.

When’ler Range’ler içinde kullanılabilir. Değerin range’in içinde olup olmadığı in veya !in ile kontrol edilir.

For

Tekrar sayısının belli olduğu durumlarda for döngüsü kullanılır.

Genel yapısı aşağıdaki şekildedir.

For loop’u aynı zamanda array’ler ile beraber kullanılabilir ve .indices ‘ile beraber index değeri alınabilir.

Bunun yanında index ile beraber value’da alınabilir.

repat(size), bir ifadenin belli bir sayıda yinelenmesi istenildiği zaman kullanılır.

While

Tekrar eden işlemlerin tek seferde yapılmasını sağlar.

Eğer number’ı ++ şeklinde arttırmazsak number hep 1 olarak kalacak ve sonsuz bir döngüye girecektir.

Ranges

Bir değer aralığı belirten ifadelere range denir. Kotlin dilinde kotlin.range packege’ının rangeTo() fonksiyonunu kullanarak .. ifadesi ile kolaylıkla range oluşturmaya izin verir.

val numbers= 1..20          //[1,20] 1 ve 20 dahildir
val number2 = 1.rangeTo(20)//[1,20] 1 ve 20 dahildir
val number3 = 1 until 20 //[1,20) 1 dahil ancak 20 dahil değildir.
val number4 = 1.until(20) //[1,20) 1 dahil ancak 20 dahil değildir.

Ayrıca char’lardan oluşan bir range de tanımlanabilir. Ancak burada Türkçe karakterler içermez.

Loop’lar ile beraber kullanılabilirler.

downTo ile büyükten küçüğe doğru range tanımı yapılabilir.

Eğer belli aralıklarla atlama yapmak isteniyorsa step fonksiyonu kullanılır.

CharRange, IntRange gibi primitive tiplerle kullanıldığında first,last,step, count değerlerine erişilebilir.

Yukarıdaki dans eşliğinde yazımı bitiriyorum :)

Bir sonraki yazımda görüşmek üzere !

Referans: Tık Tık

--

--