Kotlin'de koşullu ifadeler - 1. bölüm

Bu Kotlin codelab'inde, şanslı bir sayı atmaya çalışarak Lucky Dice Roll adlı başka bir zar oyunu oluşturacaksınız. Programınız uğurlu bir sayı belirleyip zar atacak. Ardından, zarın sonucu şanslı numarayla karşılaştırılır ve çıkışa uygun bir mesaj yazdırılır. Bunu yapmak için değerleri nasıl karşılaştıracağınızı ve Kotlin programınızda farklı kararlar almayı öğreneceksiniz.

Uygulamanın kullanıcı arayüzüyle ilgili endişelenmeden programlama kavramlarına odaklanabilmeniz için tarayıcı tabanlı Kotlin programlama aracını kullanacak ve sonuçlarınızı konsola aktaracaksınız.

Ön koşullar

  • https://try.kotlinlang.org/ adresinde kodu açma, düzenleme ve çalıştırma
  • Değişkenler, bağımsız değişkenli işlevler ve yöntemli sınıflar kullanan bir Kotlin programı oluşturup çalıştırma ve sonucu konsola yazdırma

Neler öğreneceksiniz?

  • if ve else ifadelerini kullanma
  • Büyüktür (>), küçüktür (<) ve eşittir (==) gibi operatörleri kullanarak değerleri karşılaştırma
  • Belirli bir değere göre seçenek belirlemek için when ifadelerini kullanma
  • Boolean veri türü ve karar verme sürecinde true ile false değerlerinin nasıl kullanılacağı.

Ne oluşturacaksınız?

  • Şanslı sayı belirlemenize olanak tanıyan, Kotlin tabanlı bir zar oyunu olan Lucky Dice Roll. Şanslı sayıyı atan oyuncu kazanır.

İhtiyacınız olanlar

  • İnternet bağlantısı olan bir bilgisayar.

Lucky Dice Roller programınız, kullanıcının şanslı bir sayı atıp atmadığını belirlemeli ve şanslı sayı attıysa tebrik mesajı, atmadıysa tekrar denemesi gerektiğini belirten bir mesaj göstermelidir.

Uygulama geliştirici olarak, uygulamanın nasıl davranması gerektiği konusunda kararlar vermeniz ve kullanıcılarınız için farklı sonuçlar oluşturmanız gerekir.

Bir alışveriş uygulaması geliştiriyorsanız kullanıcının seçtiği teslimat seçeneklerine göre farklı ekranlar gösterebilirsiniz. Bir bilgi yarışması oyununda, oyuncunun yanıtının doğru olup olmamasına göre farklı ekranlar gösterirsiniz. Uygulamaya bağlı olarak, kodunuzda dikkate almanız gereken birçok olası sonuç olabilir.

Şanslı Zar Atma programınızda uygulama, aşağıdakiler gibi farklı durumları ele almalıdır:

  • Zarın sonucu uğurlu sayı ise tebrik mesajı gösterin.
  • Aksi takdirde , zar atışı şanslı numara değilse tekrar denemeyi isteyen bir mesaj gösterilir.

Bu mantığı kodunuza eklemek için if, else ve when gibi özel Kotlin anahtar kelimelerini kullanın.

Bazı örneklere göz atalım.

Karşılanan bir koşul ayarlamak için if ifadesini kullanın

  1. Aşağıdaki kodu inceleyin. Çıkışın ne olacağını tahmin edebilir misiniz?
fun main() {
   val num = 5
   if (num > 4) {
       println("The variable is greater than 4")
   }
}
  1. Kodu kopyalayıp Kotlin program düzenleyicisine yapıştırın ve çıkışı gözlemlemek için programı çalıştırın.
The variable is greater than 4

Bu programın karar alma süreci şu şekildedir:

  1. Bir değişken oluşturun num ve bunu 5. olarak ayarlayın.
  2. 4, baskı "The variable is greater than 4" değerinden büyük (>) olan num değeri doğruysa.
  3. Diğer tüm durumlarda herhangi bir işlem yapmayın.

Yukarıdaki örnekte num değeri 5 olarak ayarlanmıştır. if ifadesi, değişkenin 4'ten büyük olup olmadığını karşılaştırır. Bu doğru olduğundan sistem, süslü parantez içindeki talimatları yürütür ve mesajı yazdırır.

if ifadesinin genel biçimine dikkat edin:

  • if anahtar kelimesiyle başlayın.
  • İki parantez () ile devam edin. Parantez içine koşul girilir. Koşul, true veya false olabilen herhangi bir şeydir. Örneğin, bir sayının başka bir sayıdan büyük olup olmadığı.
  • İki küme parantezi {} ile devam edin. Küme parantezlerinin içine, koşul true ise çalıştırılacak kodu girersiniz.
if (condition-is-true) {
    execute-this-code
}

Karşılanmayan bir koşul ayarlamak için if ifadesini kullanın.

  1. num değerini aşağıda gösterildiği gibi 3 olarak değiştirin. Bu kodu çalıştırırsanız ne olmasını beklersiniz?
fun main() {
   val num = 3
   if (num > 4) {
       println("The variable is greater than 4")
   }
}
  1. Kodu kopyalayıp Kotlin program düzenleyicisine yapıştırın ve çıkışı gözlemlemek için programı çalıştırın.

num değeri 3 olarak ayarlandığında num değeri 4'ten küçük olduğundan hiçbir şey yazdırılmaz. Bu nedenle, num değerinin 4'ten büyük olması koşulu false olur. Süslü parantezler arasındaki kod yürütülmez ve hiçbir şey yazdırılmaz.

Başarısız koşullar için alternatif oluşturmak üzere else öğesini kullanın.

Hiçbir şey yapmamak yerine, bir koşul karşılanmadığında kullanıcılarınıza alternatif sunabilirsiniz. Tıpkı normal dilde olduğu gibi, bunu else ifadesiyle yapabilirsiniz.

  1. Aşağıda gösterildiği gibi, num 4'ten büyük olmadığında bir mesaj yazdırmak için else ifadesini ekleyin. Bu kodu çalıştırırsanız ne olmasını beklersiniz?
fun main() {
   val num = 3
   if (num > 4) {
       println("The variable is greater than 4")
   } else {
       println("The variable is less than 4")
   }
}
  1. Kodu kopyalayıp Kotlin program düzenleyicisine yapıştırın ve çıkışı gözlemlemek için programı çalıştırın.
The variable is less than 4
  1. num değeri 3 olduğunda, num değeri 4'ten büyük olmadığı için programın else ifadesiyle ilişkili "The variable is less than 4" mesajını yazdırdığını unutmayın .
  2. num değerini 5 olarak değiştirin ve programı tekrar çalıştırın. Şimdi num değerinin 4'ten büyük olduğu doğru ve program "The variable is greater than 4" yazdırıyor.
  3. num değerini 4 olarak değiştirin ve programınızı çalıştırın. Şimdi 4, 4'ten büyük olmadığı için program "The variable is less than 4" yazdırır.

"The variable is less than 4", kodda belirlediğiniz koşullar için doğru çıktı olsa da 4, 4'ten küçük olmadığı için yazdırılan ifade doğru değildir. Yapabileceğiniz şey, üçüncü olasılığı kontrol eden başka bir koşul eklemek (num değerinin tam olarak 4 olup olmadığını kontrol etmek) ve bu koşul doğru olduğunda doğru ifadeyi yazdırmaktır.

Alternatif koşullar eklemek için else + if kombinasyonunu kullanın.

Birden fazla koşulunuz olabilir. Örneğin, num için tüm olasılıkları şu şekilde kapsayabilirsiniz:

  • num 4'ten büyükse "The variable is greater than 4" yazdırın.
  • Aksi takdirde num 4'e eşitse "The variable is equal to 4" değerini yazdır.
  • Else, print "The variable is less than 4".

Bunlar, if-else ifadesinde farklı durumlar olarak adlandırılır. Listelenen 3 destek kaydı var.

Güncellenen kod aşağıdaki gibi görünür:

fun main() {
   val num = 4
   if (num > 4) {
       println("The variable is greater than 4")
   } else if (num == 4) {
       println("The variable is equal to 4")
   } else {
       println("The variable is less than 4")
   }
}

Aşağıdaki değişikliklere dikkat edin:

  • Yeni koşulu test edebilmeniz için num değeri artık 4 olarak ayarlanmıştır.
  • Orijinal if ve else ifadeleri arasında, num tam olarak 4 olduğunda geçerli olan yeni bir else if ifadesi yer alır.
  1. Yukarıdaki kodu kopyalayıp Kotlin program düzenleyicisine yapıştırın ve çıktıyı gözlemlemek için programı çalıştırın.
The variable is equal to 4
  1. num değerini değiştirerek bunun çıktıyı nasıl etkilediğini deneyin. num değerini 2 ve 6 olarak değiştirin. Böylece koşulların her birinin true olduğunu görebilirsiniz.

Kontrol akışı

Yukarıdaki if-else ifadelerine baktığınızda kod, koşulların kontrol ettiği şekilde yürütülür veya akışa geçer. Bu koşullu ifadelerle yürütmeyi yönlendirme şeklinize programın "kontrol akışı" adı verilir.

  • Zar atışınızın num 3 olduğunu varsayalım. Program, ilk koşulu (num > 4) kontrol eder. Bu ifade yanlış olduğundan program, bir sonraki koşulu (num == 4) kontrol eder. Bu koşul da yanlıştır. Ardından program, son seçenek olan else ifadesinin kodunu yürütür.
  • Zar atma numaranız 6 ise ilk koşul (num > 4) doğrudur. Program, "The variable is greater than 4" mesajını yazdırır. Bu koşul doğru olduğundan geri kalanını kontrol etmesi gerekmez ve if-else ifadesiyle işlem tamamlanır.
  • Alternatif koşullar eklemek için else + if kombinasyonunu kullanın.

Bu bölümde, önceki görevde öğrendiklerinizi kullanarak Dice Roller programını, önceden ayarlanmış bir şanslı sayıyı atıp atmadığınızı kontrol edecek şekilde güncelleyeceksiniz. Bu durumda kazanırsınız.

Başlangıç kodunuzu ayarlama

Önceki Kotlin Dice Roller programının çözüm koduna benzer bir kodla Lucky Dice Roller'ı başlatıyorsunuz. Önceki kodunuzdaki main() işlevini eşleşecek şekilde düzenleyebilir veya başlamak için aşağıdaki kodu kopyalayıp yapıştırabilirsiniz.

fun main() {
    val myFirstDice = Dice(6)
    val diceRoll = myFirstDice.roll()
    println("Your ${myFirstDice.numSides} sided dice rolled ${diceRoll}!")
}

class Dice (val numSides: Int) {

    fun roll(): Int {
        return (1..numSides).random()
    }
}

Şanslı numaranın çekilip çekilmediğini kontrol etme

Önce bir şanslı sayı oluşturun, ardından zar atışını bu sayıyla karşılaştırın.

.

  1. main() bölümünde println() ifadesini silin.
  2. main() içinde luckyNumber adlı bir val ekleyin ve bunu 4 olarak ayarlayın. Kodunuz aşağıdaki gibi görünmelidir.
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4
}
  1. Aşağıda, parantez içinde rollResult değerinin luckyNumber değerine eşit olup olmadığını (==) kontrol eden bir koşul içeren if ifadesi ekleyin.() Daha fazla kod ekleyebilmek için küme parantezleri {} arasında biraz boşluk bırakın.
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4
    if (rollResult == luckyNumber) {

    }
}
  1. Küme ayraçlarının {} içine, "You win!" yazdırmak için bir println ifadesi ekleyin.
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4

    if (rollResult == luckyNumber) {
        println("You win!")
    }
}
  1. Programınızı çalıştırın. Şanslı olup çıkışta kazanan mesajı görene kadar birkaç kez çalıştırmanız gerekebilir.
You win!

Uğurlu sayı gelmediğinde yanıt verme

Kullanıcı kazanmadığında programdan geri bildirim almaması, programın bozuk olup olmadığını merak etmesine neden olabilir. Kullanıcı bir işlem yaptığında her zaman yanıt vermek iyi bir uygulamadır. Şanslı Zar Atma programında, else ifadesini kullanarak kullanıcılara kazanmadıklarını bildirebilirsiniz.

  1. Yazdırmak için else ifadesi ekleyin "You didn't win, try again!".
fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   if (rollResult == luckyNumber) {
       println("You win!")
   } else {
       println("You didn't win, try again!")
   }
}
  1. Programı çalıştırın. Sonuç ne olursa olsun kullanıcılarınız her zaman bilgilendirilir.

Bu noktada kullanıcılar kazanıp kazanmadıklarını bilir ancak neden kazandıklarını veya kaybettiklerini bilmez. Kullanıcılara her zaman bilgi vererek yaptıkları işlemlerin sonucunu anlamalarını sağlayın. Programınızın bir kredi başvurusu olduğunu düşünün. "Kredi notunuz düşük olduğu için onaylanmadınız" ifadesi, "Üzgünüz, size kredi veremiyoruz, tekrar deneyin!" ifadesinden çok daha bilgilendiricidir. Lucky Dice Roller'da (Şanslı Zar Atma) kullanıcılar kaybederse her atış için farklı bir bilgilendirici mesaj gösterebilirsiniz. Bunu yapmak için birden fazla else if ifadesi kullanın.

  1. Her rulo için farklı bir mesaj yazdırmak üzere else if ifadeleri ekleyin. Gerekirse önceki görevde öğrendiğiniz biçimi kullanın.
fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   if (rollResult == luckyNumber) {
       println("You win!")
   } else if (rollResult == 1) {
       println("So sorry! You rolled a 1. Try again!")
   } else if (rollResult == 2) {
       println("Sadly, you rolled a 2. Try again!")
   } else if (rollResult == 3) {
       println("Unfortunately, you rolled a 3. Try again!")
   } else if (rollResult == 4) {
       println("No luck! You rolled a 4. Try again!")
   } else if (rollResult == 5) {
       println("Don't cry! You rolled a 5. Try again!")
   } else {
       println("Apologies! you rolled a 6. Try again!")
   }
}

Yukarıdaki kodda,

  • rollResult değerinin luckyNumber olup olmadığını kontrol edin.
  • rollResult, luckyNumber ise kazanan mesajı yazdırın.
  • Aksi takdirde, rollResult değerinin 1 olup olmadığını kontrol edin. Değer 1 ise tekrar deneme mesajı yazdırın.
  • Aksi takdirde, rollResult değerinin 2 olup olmadığını kontrol edin. Değer 2 ise farklı bir tekrar deneyin mesajı yazdırın.
  • Aksi takdirde, 5. maddeye kadar kontrol etmeye devam edin.
  • Sayı 1-5 arasında değilse geriye tek seçenek olan 6 kalır. Bu nedenle else if ile başka bir teste gerek yoktur ve son else ifadesiyle son seçeneği yakalayabilirsiniz.

Birden fazla else if durumu olması çok yaygın olduğundan Kotlin'de bunları yazmanın daha basit bir yolu vardır.

Programlamada birçok farklı sonuç veya durum için test yapmak çok yaygındır. Bazen olası sonuçların listesi çok uzun olabilir. Örneğin, 12 yüzlü bir zar atıyorsanız başarı ile nihai else arasında 11 else if ifadesi olur. Kotlin, bu tür ifadelerin yazılmasını ve okunmasını kolaylaştırmak için when ifadesini kullanıma sunar. Bu sayede hataların önüne geçilir.

Programınızı when ifadesini kullanacak şekilde değiştireceksiniz. when ifadeleri, when anahtar kelimesiyle başlar ve ardından parantez () gelir. Parantez içine test edilecek değer girilir. Bunu, farklı koşullarda yürütülecek kod için küme parantezleri {} izler.

  1. Programınızda, main() bölümünde, ilk if ifadesinden son else ifadesini kapatan süslü paranteze } kadar olan kodu seçip silin.
fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4
}
  1. main() bölümünde, luckyNumber beyanının altında bir when ifadesi oluşturun. when, yayınlanan sonuçla karşılaştırmalı olarak test edilmesi gerektiğinden parantezlerin () arasına rollResult ifadesini yerleştirin. Aşağıda gösterildiği gibi, biraz daha boşluk bırakarak küme parantezleri {} ekleyin.
fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   when (rollResult) {

   }
}

Daha önce olduğu gibi, önce rollResult ile luckyNumber değerinin aynı olup olmadığını test edin.

  1. when ifadesinin küme parantezleri {} içine, rollResult ile luckyNumber değerlerini karşılaştıran ve aynıysa kazanan mesajı yazdıran bir ifade ekleyin. İfade şu şekilde görünür:
luckyNumber -> println("You win!")

Bunun anlamı şudur:

  • Öncelikle, karşılaştırdığınız değeri rollResult yerine koyarsınız. Bu luckyNumber.
  • Ardından bir ok (->) ekleyin.
  • Ardından, eşleşme olması durumunda gerçekleştirilecek işlemi ekleyin.

Bunu "rollResult, luckyNumber ise "You win!" mesajını yazdır" şeklinde okuyun.

main() kodunuz da şu şekilde görünür.

fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   when (rollResult) {
       luckyNumber -> println("You win!")
   }
}
  1. Aşağıda gösterildiği gibi, olası 1-6 atışları için satır ve mesaj eklemek üzere aynı kalıbı kullanın. Tamamlanmış main() işleviniz aşağıdaki gibi görünmelidir.
fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   when (rollResult) {
       luckyNumber -> println("You won!")
       1 -> println("So sorry! You rolled a 1. Try again!")
       2 -> println("Sadly, you rolled a 2. Try again!")
       3 -> println("Unfortunately, you rolled a 3. Try again!")
       4 -> println("No luck! You rolled a 4. Try again!")
       5 -> println("Don't cry! You rolled a 5. Try again!")
       6 -> println("Apologies! you rolled a 6. Try again!")
   }
}
  1. Programınızı çalıştırın. Çıkışta herhangi bir fark olmamasına rağmen kodunuz çok daha kompakt ve okunması kolaydır.

Tebrikler! Koşullara bağlı olarak iletileri yazdırmanın iki yolunu öğrendiniz. Bu, ilginç programlar yazmak için güçlü bir araçtır.

fun main() {
   val myFirstDice = Dice(6)
   val rollResult = myFirstDice.roll()
   val luckyNumber = 4

   when (rollResult) {
       luckyNumber -> println("You won!")
       1 -> println("So sorry! You rolled a 1. Try again!")
       2 -> println("Sadly, you rolled a 2. Try again!")
       3 -> println("Unfortunately, you rolled a 3. Try again!")
       4 -> println("No luck! You rolled a 4. Try again!")
       5 -> println("Don't cry! You rolled a 5. Try again!")
       6 -> println("Apologies! you rolled a 6. Try again!")
   }
}

class Dice(val numSides: Int) {
   fun roll(): Int {
       return (1..numSides).random()
   }
}
  • Bazı talimatların yürütülmesi için koşul belirlemek üzere if ifadesini kullanın. Örneğin, kullanıcı şanslı numarayı tutturursa kazandığına dair bir mesaj yazdırın.
  • Boolean veri türü, true ve false değerlerine sahiptir ve karar verme sürecinde kullanılabilir.
  • Büyüktür (>), küçüktür (<) ve eşittir (==) gibi operatörleri kullanarak değerleri karşılaştırın.
  • Birden fazla koşul ayarlamak için else if ifadeleri zincirini kullanın. Örneğin, olası her zar atışı için farklı bir mesaj yazdırın.
  • Açıkça kapsanmayan durumları yakalamak için bir koşul zincirinin sonunda else ifadesini kullanın. 6 yüzlü zar durumlarını ele alırsanız else ifadesi, 8 yüzlü zarla atılan 7 ve 8 sayılarını yakalar.
  • Bir değeri karşılaştırmaya dayalı olarak kodu yürütmenin kısa bir yolu olarak when ifadesini kullanın.

Aşağıdakileri yapın:

  1. myFirstDice şeklini 8 kenarlı olarak değiştirin ve kodunuzu çalıştırın. Süreç

İpucu: Kenar sayısını artırdığınızda when ifadesi artık tüm durumları kapsamaz. Bu nedenle, kapsanmayan durumlarda hiçbir şey yazdırılmaz.

  1. 8 tarafın tamamını hesaba katmak için when ifadesini düzeltin. Bunun için ek numaralarla ilgili destek kaydı oluşturabilirsiniz. Sorun: Her sayı için yeni bir durum eklemek yerine, açıkça ele alınmayan tüm durumları yakalamak için bir else ifadesi kullanın.

İpucu: Daha fazla tarafı kapsayacak şekilde daha fazla durum ekleyebilirsiniz. Bu, her sayı için farklı bir mesaj istiyorsanız iyi bir yöntemdir. Alternatif olarak, else ifadesini kullanabilir ve mevcut kodun kapsadığı 6'dan büyük tüm taraflar için aynı mesajı yazdırabilirsiniz.

  1. myFirstDice şeklini yalnızca 4 kenarlı olacak şekilde değiştir. Süreç

İpucu: Zarın yüz sayısını when ifadesinin kapsadığı sayıdan daha az olacak şekilde değiştirmek, olabilecek tüm durumlar kapsandığı için fark edilebilir bir etki yaratmaz.