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
veelse
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ürecindetrue
ilefalse
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
- 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")
}
}
- 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:
- Bir değişken oluşturun
num
ve bunu5.
olarak ayarlayın. - 4
,
baskı"The variable is greater than 4"
değerinden büyük (>
) olannum
değeri doğruysa. - 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
veyafalse
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şultrue
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.
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")
}
}
- 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.
- Aşağıda gösterildiği gibi,
num
4'ten büyük olmadığında bir mesaj yazdırmak içinelse
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")
}
}
- 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
num
değeri 3 olduğunda,num
değeri 4'ten büyük olmadığı için programınelse
ifadesiyle ilişkili"The variable is less than 4"
mesajını yazdırdığını unutmayın .num
değerini 5 olarak değiştirin ve programı tekrar çalıştırın. Şimdinum
değerinin 4'ten büyük olduğu doğru ve program "The variable is greater than 4
" yazdırıyor.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
veelse
ifadeleri arasında,num
tam olarak 4 olduğunda geçerli olan yeni birelse if
ifadesi yer alır.
- 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
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 birinintrue
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.
.
main()
bölümündeprintln()
ifadesini silin.main()
içindeluckyNumber
adlı birval
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
}
- Aşağıda, parantez içinde
rollResult
değerininluckyNumber
değerine eşit olup olmadığını (==
) kontrol eden bir koşul içerenif
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) {
}
}
- Küme ayraçlarının
{}
içine,"You win!"
yazdırmak için birprintln
ifadesi ekleyin.
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
if (rollResult == luckyNumber) {
println("You win!")
}
}
- 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.
- 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!")
}
}
- 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.
- 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ğerininluckyNumber
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 sonelse
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.
- Programınızda,
main()
bölümünde, ilkif
ifadesinden sonelse
ifadesini kapatan süslü paranteze}
kadar olan kodu seçip silin.
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
}
main()
bölümünde,luckyNumber
beyanının altında birwhen
ifadesi oluşturun.when
, yayınlanan sonuçla karşılaştırmalı olarak test edilmesi gerektiğinden parantezlerin()
arasınarollResult
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.
when
ifadesinin küme parantezleri{}
içine,rollResult
ileluckyNumber
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. BuluckyNumber
. - 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!")
}
}
- 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!")
}
}
- 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
vefalse
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ızelse
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:
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.
- 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 birelse
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.
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.