Programcılar için Kotlin Eğitim Programı 2: Kotlin ile ilgili temel bilgiler

Bu codelab'de, Programcılar için Kotlin Eğitim Programı kursunun bir parçası bulunmaktadır. Codelab'ler üzerinden sırayla çalışıyorsanız bu kurstan en iyi şekilde yararlanabilirsiniz. Bilginize bağlı olarak bazı bölümlere göz atabilirsiniz. Bu kurs, nesneye duyarlı bir dil bilen ve Kotlin öğrenmek isteyen programcılara yöneliktir.

Giriş

Bu codelab'de, Kotlin programlama diliyle ilgili temel bilgileri öğreneceksiniz: Veri türleri, operatörler, değişkenler, kontrol yapıları ve null (boş olmayan) değişkenler. Bu kurs, nesne odaklı bir dil bilen ve Kotlin öğrenmek isteyen programcılara yöneliktir.

Bu kurstaki dersler, tek bir örnek uygulama oluşturmak yerine bilginizi geliştirmek için tasarlanmıştır ancak birbirinizden yarı bağımsızdır. Böylece aşina olduğunuz bölümlere göz atabilirsiniz. Hepsini bir araya getirmek için, örneklerin çoğu akvaryum teması kullanır. Akvaryum hikayesinin tamamını görmek isterseniz Programcılar için Kotlin Eğitim Programı Udacity'deki kursa göz atabilirsiniz.

Bilmeniz gerekenler

  • IntelliJ IDEA'da proje oluşturma
  • IntelliJ IDEA'da Kotlin's REPL (Read-Eval-Print Loop) ile kod açma ve yürütme (Tools > Kotlin > Kotlin REPL)

Neler öğreneceksiniz?

  • Kotlin veri türlerini, operatörlerini ve değişkenleri kullanma
  • Boole ve koşullarla çalışma
  • Null ve null olmayan değişkenler arasındaki fark
  • Kotlin'de diziler, listeler ve döngüler nasıl çalışır?

Yapacaklarınız

  • Kotlin REPL ile birlikte çalışarak Kotlin ile ilgili temel bilgileri öğrenin

Bu görevde Kotlin programlama dilinde operatörler ve türler hakkında bilgi edineceksiniz.

1. Adım: Sayısal operatörleri keşfedin

  1. Henüz açılmadıysa IntelliJ IDEA'yı açın.
  2. Kotlin REPL'i açmak için Araçlar > Kotlin > Kotlin REPL'i seçin.

Kotlin, diğer dillerde olduğu gibi artı, eksi, zaman ve bölme için +, -, * ve / değerlerini kullanır. Kotlin; Int, Long, Double ve Float gibi farklı sayı türlerini de destekler.

  1. REPL alanına aşağıdaki ifadeleri girin. Sonucu görmek için her birinin ardından Control+Enter (Mac'te Command+Enter) tuşuna basın.
1+1
⇒ res8: kotlin.Int = 2

53-3
⇒ res9: kotlin.Int = 50

50/10
⇒ res10: kotlin.Int = 5

1.0/2.0
⇒ res11: kotlin.Double = 0.5

2.0*3.5
⇒ res12: kotlin.Double = 7.0

İşlem sonuçlarının işlenenlerin türlerini tuttuğunu unutmayın; yani, 1/2 = 0, ancak 1,0/2,0 = 0,5.

  1. Farklı tam sayı ve ondalık sayı kombinasyonları içeren bazı ifadeler deneyin.
6*50
⇒ res13: kotlin.Int = 300

6.0*50.0
⇒ res14: kotlin.Double = 300.0

6.0*50
⇒ res15: kotlin.Double = 300.0
  1. Sayılarla ilgili bazı yöntemleri arayın. Kotlin, sayıları temel gibi tutar ancak sayılardaki yöntemleri nesne gibi çağırır.
2.times(3)
⇒ res5: kotlin.Int = 6

3.5.plus(4)
⇒ res8: kotlin.Double = 7.5

2.4.div(2)
⇒ res9: kotlin.Double = 1.2

2. Adım: Türleri kullanarak alıştırma yapın

Kotlin, sayı türleri arasında dolaylı olarak dönüşüm yapmaz. Bu nedenle, doğrudan uzun bir değişkene kısa değer, Int öğesine ise Byte değerini atayamazsınız. Bunun nedeni, dolaylı sayı dönüşümünün programlardaki yaygın bir hata kaynağı olmasıdır. Yayınlayarak her zaman farklı türler değerleri atayabilirsiniz.

  1. Mümkün olan yayınlardan bazılarını görmek için REPL'de Int türünde bir değişken tanımlayın.
val i: Int = 6
  1. Yeni bir değişken oluşturun, ardından yukarıda gösterilen değişken adını ve ardından .to yazın.
val b1 = i.to

IntelliJ IDEA, olası tamamlamaların listesini gösterir. Bu otomatik tamamlama, her türden değişken ve nesne için kullanılabilir.

  1. Listeden toByte()'i seçin, ardından değişkeni yazdırın.
val b1 = i.toByte()
println(b1)
⇒ 6
  1. Farklı türdeki değişkenlere Byte değeri atayın.
val b2: Byte = 1 // OK, literals are checked statically
println(b2)
⇒ 1

val i1: Int = b2
⇒ error: type mismatch: inferred type is Byte but Int was expected

val i2: String = b2
⇒ error: type mismatch: inferred type is Byte but String was expected

val i3: Double = b2
⇒ error: type mismatch: inferred type is Byte but Double was expected
  1. Hata veren ödevler için bunların yerine yayınlamayı deneyin.
val i4: Int = b2.toInt() // OK!
println(i4)
⇒ 1

val i5: String = b2.toString()
println(i5)
⇒ 1

val i6: Double = b2.toDouble()
println(i6)
⇒ 1.0
  1. Kotlin, uzun sayısal sabit değerleri daha okunabilir hale getirmek için rakamlara alt çizgi yerleştirmenize olanak tanır. Bu da sizin için anlamlıdır. Farklı sayısal sabit değerler girmeyi deneyin.
val oneMillion = 1_000_000
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010

3. adım: Değişken türlerinin değerini öğrenin

Kotlin iki tür değişkeni destekler: değiştirilebilir ve değiştirilemez. val ile bir kez değer atayabilirsiniz. Tekrar bir öğe atamaya çalışırsanız bir hata alırsınız. var ile bir değer atayabilir, ardından programın ilerleyen kısımlarında bu değeri değiştirebilirsiniz.

  1. Değişkenleri val ve var kullanarak tanımlayın, ardından bunlara yeni değerler atayın.
var fish = 1
fish = 2
val aquarium = 1
aquarium = 2
⇒ error: val cannot be reassigned

var ile tanımlandığı için fish değerine, ardından da yeni bir değer atayabilirsiniz. aquarium öğesine yeni bir değer atanmaya çalışıldığında hata val ile tanımlandığından hata veriliyor.

Bir değişkende depoladığınız tür, derleyicinin bunu bağlamdan çözebildiği durumlarda belirlenir. İsterseniz iki nokta üst üste gösterimini kullanarak her zaman bir değişkenin türünü açıkça belirtebilirsiniz.

  1. Bazı değişkenler tanımlayın ve türü açıkça belirtin.
var fish: Int = 12
var lakes: Double = 2.5

Siz veya derleyici tarafından bir tür atandıktan sonra türü değiştiremez ya da bir hata alabilirsiniz.

4. Adım: Dizeler hakkında bilgi edinin

Kotlin'deki dizeler, dizeler için " ve tek karakterler için ' kullanarak diğer programlama dillerindeki dizeler gibi çalışır. Ayrıca dizeleri + operatörüyle birleştirebilirsiniz. Dize şablonlarını değerlerle birleştirerek oluşturabilirsiniz. $variable adı, değeri temsil eden metinle değiştirilir. Buna değişken interpolasyonu denir.

  1. Dize şablonu oluşturun.
val numberOfFish = 5
val numberOfPlants = 12
"I have $numberOfFish fish" + " and $numberOfPlants plants"
⇒ res20: kotlin.String = I have 5 fish and 12 plants
  1. İçinde ifade olan bir dize şablonu oluşturun. Diğer dillerde olduğu gibi değer, bir ifadenin sonucu olabilir. İfadeyi tanımlamak için süslü ayraçlar {} kullanın.
"I have ${numberOfFish + numberOfPlants} fish and plants"
⇒ res21: kotlin.String = I have 17 fish and plants

Bu görevde boole'leri ve Kotlin programlama dilinde koşulları kontrol etmeyi öğrenirsiniz. Diğer dillerde olduğu gibi Kotlin'de de boole operatörü ve boole operatörü (ör. küçük, eşit, büyük veya daha büyük) (<, ==, >, !=, <=, >=) bulunur.

  1. Bir if/else ifadesi yazın.
val numberOfFish = 50
val numberOfPlants = 23
if (numberOfFish > numberOfPlants) {
    println("Good ratio!") 
} else {
    println("Unhealthy ratio")
}
⇒ Good ratio!
  1. Bir if ifadesinde aralık deneyin. Kotlin'de, test ettiğiniz koşul da aralıkları kullanabilir.
val fish = 50
if (fish in 1..100) {
    println(fish)
}
⇒ 50
  1. Birden fazla destek kaydı içeren bir if yazın. Daha karmaşık koşullar için mantıksal ve && ile mantıksal veya || değerlerini kullanın. Diğer dillerde olduğu gibi, else if kullanarak birden fazla durumunuz olabilir.
if (numberOfFish == 0) {
    println("Empty tank")
} else if (numberOfFish < 40) {
    println("Got fish!")
} else {
    println("That's a lot of fish!")
}
⇒ That's a lot of fish!
  1. Bir when ifadesi deneyin. Kotlin'deki if/else if/else ifade dizisini yazmanın daha iyi bir yolu var. Bu ifade, diğer dillerdeki switch ifadesine benzeyen when ifadesi içeriyor. when ifadesindeki koşullar da aralıkları kullanabilir.
when (numberOfFish) {
    0  -> println("Empty tank")
    in 1..39 -> println("Got fish!")
    else -> println("That's a lot of fish!")
}
⇒ That's a lot of fish!

Bu görevde null ve null olmayan değişkenler hakkında bilgi edinirsiniz. null'ları içeren programlama hataları, çok sayıda hatanın kaynağıdır. Kotlin, null olmayan değişkenler sunarak hata sayısını azaltmaya çalışır.

1. Adım: Boş değer hakkında daha fazla bilgi

Değişkenler varsayılan olarak null olamaz.

  1. Bir Int tanımlayın ve ona null atayın.
var rocks: Int = null
⇒ error: null can not be a value of a non-null type Int
  1. Değişkenin boş olabileceğini belirtmek için türden sonra ? olan soru işareti operatörünü kullanın. Bir Int? tanımlayın ve ona null atayın.
var marbles: Int? = null

Liste gibi karmaşık veri türleriniz olduğunda:

  • Listedeki öğelerin boş değerli olmasına izin verebilirsiniz.
  • Listenin boş değerli olmasına izin verebilirsiniz, ancak boş değilse öğeleri boş olamaz.
  • Listenin veya öğelerin boş olmasına izin verebilirsiniz.

Listeler ve diğer bazı karmaşık veri türleri daha sonraki bir görevde ele alınmıştır.

2. Adım: ? ve ?: operatörleri

null'i ? operatörüyle test ederek çok sayıda if/else ifadesi yazma zahmetinden kurtulabilirsiniz.

  1. fishFoodTreats değişkeninin null olup olmadığını kontrol etmenin daha uzun yolunu içeren bir kod yazın. Ardından, bu değişkeni azaltın.
var fishFoodTreats = 6
if (fishFoodTreats != null) {
    fishFoodTreats = fishFoodTreats.dec()
}
  1. Şimdi ? operatörünü kullanarak Kotlin ile yazma yöntemini inceleyin.
var fishFoodTreats = 6
fishFoodTreats = fishFoodTreats?.dec()
  1. ?: operatörüyle boş değerli test zinciri de yapabilirsiniz. Şu örneği inceleyin:
fishFoodTreats = fishFoodTreats?.dec() ?: 0

"fishFoodTreats" null değilse kısaltma ve kısaltılmış halidir. Aksi takdirde, ?: değerindeki 0 değerini kullanın. fishFoodTreats null ise değerlendirme durdurulur ve dec() yöntemi çağrılmaz.

Boş noktalara işaret etme

NullPointerExceptions şarkısını gerçekten seviyorsanız Kotlin, onları elinizde tutmanıza izin verir. Boş olmayan onaylama operatörü !! (çift bant), değeri boş olmayan bir türe dönüştürür ve null ise istisna oluşturur.

val len = s!!.length   // throws NullPointerException if s is null

Bu görevde diziler ve listeler hakkında bilgi edinecek; Kotlin programlama dilinde döngüler oluşturmanın farklı yollarını öğreneceksiniz.

1. Adım: Liste oluşturun

Listeler, Kotlin'de temel bir türdür ve diğer dillerdeki listelere benzer.

  1. listOf kullanarak bir liste beyan edin ve yazdırın. Bu liste değiştirilemez.
val school = listOf("mackerel", "trout", "halibut")
println(school)
⇒ [mackerel, trout, halibut]
  1. mutableListOf kullanılarak değiştirilebilen bir listeyi bildirin. Bir öğeyi kaldırın.
val myList = mutableListOf("tuna", "salmon", "shark")
myList.remove("shark")
⇒ res36: kotlin.Boolean = true

remove() yöntemi, iletilen öğeyi başarıyla kaldırdığında true döndürür.

2. Adım: Dizi oluşturma

Kotlin, diğer dillerde olduğu gibi diziler içerir. Kotlin'de değiştirilemez ve sabit sürümleri olan listelerden farklı olarak, bir Array öğesinin değişebilir sürümü yoktur. Dizi oluşturulduktan sonra boyut sabitlenir. Yeni bir diziye kopyalamak dışında öğe ekleyemez veya kaldıramazsınız.

val ve var kullanımıyla ilgili kurallar, listelerdeki dizilerle aynıdır.

  1. arrayOf kullanarak bir dize dizisi bildirin. Yazdırmak için java.util.Arrays.toString() dizisi yardımcı programını kullanın.
val school = arrayOf("shark", "salmon", "minnow")
println(java.util.Arrays.toString(school))
⇒ [shark, salmon, minnow]
  1. arrayOf ile belirtilen bir dizi, öğelerle ilişkilendirilmiş türe sahip değil. Bu nedenle, türleri birlikte kullanabilirsiniz. Farklı türlere sahip bir dizi bildirme.
val mix = arrayOf("fish", 2)
  1. Ayrıca, tüm öğeler için dizileri tek bir türle bildirebilirsiniz. intArrayOf() kullanarak bir tam sayı dizisi bildirin. Farklı türde sıralar için karşılık gelen derleyiciler veya örnek işlevleri vardır.
val numbers = intArrayOf(1,2,3)
  1. İki diziyi + operatörüyle birleştirin.
val numbers = intArrayOf(1,2,3)
val numbers3 = intArrayOf(4,5,6)
val foo2 = numbers3 + numbers
println(foo2[5])
=> 3
  1. İç içe yerleştirilmiş dizi ve listelerin farklı kombinasyonlarını deneyin. Diğer dillerde olduğu gibi dizileri ve listeleri iç içe yerleştirebilirsiniz. Yani bir diziyi bir diziye yerleştirdiğinizde, dizilerdeki bir diziyi değil, dizilerini görürsünüz. Bir dizinin öğeleri aynı zamanda listeler, liste öğeleri de diziler olabilir.
val numbers = intArrayOf(1, 2, 3)
val oceans = listOf("Atlantic", "Pacific")
val oddList = listOf(numbers, oceans, "salmon")
println(oddList)
⇒ [[I@89178b4, [Atlantic, Pacific], salmon]

İlk öğe (numbers), Array. Diziyi yazdırmak için kullanmadığınızda Kotlin, dizinin içeriği yerine adresi yazdırır.

  1. Kotlin'in iyi özelliklerinden biri, dizileri 0'a başlatmak yerine kodla başlatabilmenizdir. Şu örneği deneyin:
val array = Array (5) { it * 2 }
println(java.util.Arrays.toString(array))
⇒ [0, 2, 4, 6, 8]

Başlatma kodu, süslü ayraçlar ({}) arasındadır. Kodda it, 0 ile başlayan dizi dizinini ifade eder.

3. Adım: Döngü oluşturun

Artık listeleriniz ve dizileriniz olduğuna göre, öğeler arasında geçiş beklediğiniz şekilde çalışır.

  1. Dizi oluşturun. Diziyi tekrarlamak ve öğeleri yazdırmak için bir for döngüsü kullanın.
val school = arrayOf("shark", "salmon", "minnow")
for (element in school) {
    print(element + " ")
}
⇒ shark salmon minnow
  1. Kotlin'de, öğeler ve dizinler arasında aynı anda gezinebilirsiniz. Şu örneği deneyin:
for ((index, element) in school.withIndex()) {
    println("Item at $index is $element\n")
}
⇒ Item at 0 is shark
Item at 1 is salmon
Item at 2 is minnow
  1. Farklı adım boyutlarını ve aralıklarını deneyin. Alfabetik olarak, sayı veya karakter aralıkları belirtebilirsiniz. Diğer dillerde olduğu gibi bu nedenle de 1 adım ilerlemeniz gerekmez. downTo öğesini kullanarak geriye gidebilirsiniz.
for (i in 1..5) print(i)
⇒ 12345

for (i in 5 downTo 1) print(i)
⇒ 54321

for (i in 3..6 step 2) print(i)
⇒ 35

for (i in 'd'..'g') print (i)
⇒ defg
  1. Döngülerden bazılarını deneyebilirsiniz. Kotlin, diğer diller gibi while döngülerine, do...while döngülerine ve ++ ve -- operatörlerine sahiptir. Kotlin döngüsü repeat döngüye de sahiptir.
var bubbles = 0
while (bubbles < 50) {
    bubbles++
}
println("$bubbles bubbles in the water\n")

do {
    bubbles--
} while (bubbles > 50)
println("$bubbles bubbles in the water\n")

repeat(2) {
     println("A fish is swimming")
}
⇒ 50 bubbles in the water
49 bubbles in the water
A fish is swimmingA fish is swimming

Kotlin operatörü, listeler ve döngüler gibi temel konularda diğer dillere çok benzer ancak bazı önemli farklılıklar vardır.

Aşağıdaki özellikler, Kotlin'de diğer dillerde alışık olduğunuzdan farklı olabilir:

  • Kotlin türleri, dolaylı olarak dönüştürülemez. Yayınlamayı kullanın.
  • val ile belirtilen değişkenler yalnızca bir kez atanabilir.
  • Kotlin değişkenleri varsayılan olarak boş değerli olamaz. Değişkenleri null olacak şekilde ayarlamak için ? ifadesini kullanın.
  • Kotlin ile for döngüsünde bir dizinin dizinindeki ve öğeleri aynı anda döngüye alabilirsiniz.

Aşağıdaki Kotlin programlama yapıları, diğer dillerdeki yapılara benzerdir:

  • Diziler ve listeler, tek bir türe veya karışık türlere sahip olabilir.
  • Diziler ve listeler iç içe yerleştirilebilir.
  • for, while, do/while ve repeat ile döngü oluşturabilirsiniz.
  • when ifadesi, Kotlin' uygulamasının switch ifadesidir, ancak when daha esnektir.

Kotlin belgeleri

Bu kurstaki herhangi bir konu hakkında daha fazla bilgi edinmek istiyorsanız veya takılırsanız en iyi başlangıç noktanız olarak https://kotlinlang.org adresine gidin.

Kotlin eğiticileri

https://try.kotlinlang.org web sitesinde web tabanlı çevirmen olarak Kotlin Koans adlı zengin eğitici videolar ve örnekler içeren eksiksiz bir referans dokümanı grubu bulunur.

Udacity kursu

Bu konudaki Udacity kursunu görüntülemek için Programcılar için Kotlin Eğitim Programı'na bakın.

IntelliJ IDEA

IntelliJ IDEA ile ilgili belgeler JetBrains web sitesinde bulunabilir.

Bu bölümde, bir eğitmen tarafından sunulan kurs kapsamında bu codelab üzerinden çalışan öğrenciler için olası ev ödevi ödevleri listelenmektedir. Öğretmenin şunları yapması gerekir:

  • Gerekirse ev ödevini atayın.
  • Öğrencilere ev ödevlerinin nasıl gönderileceğini bildirin.
  • Ev ödevlerine not verin.

Öğretmenler bu önerileri istedikleri kadar kullanabilir veya uygun görebilir ve uygun olan diğer ev ödevlerini atayabilirler.

Bu codelab'de kendiniz çalışıyorsanız, bilginizi test etmek için bu ödevlerden yararlanabilirsiniz.

Bu soruları yanıtlayın

1. Soru

Değişmeyen dize listesini aşağıdakilerden hangisi bildirir?

makbuz val school = arrayOf("shark", "salmon", "minnow")

makbuz var school = arrayOf("shark", "salmon", "minnow")

makbuz val school = listOf("shark", "salmon", "minnow")

makbuz val school = mutableListOf("shark", "salmon", "minnow")

2. Soru

Aşağıdaki kodun çıktısı ne olacak?
for (i in 3..8 step 2) print(i)

▢ 345678

▢ 468

▢ 38

▢ 357

3. Soru

Bu koddaki soru işaretinin amacı nedir?
var rocks: Int? = 3

rocks değişkeninin türü sabit değil.

rocks değişkeni boş olarak ayarlanabilir.

rocks değişkeni boş değere ayarlanamaz.

rocks değişkeninin hemen başlatılmaması gerekir.

Sonraki derse geçin: 3. İşlevler

Diğer codelab'lerin bağlantıları da dahil olmak üzere kursa genel bir bakış için Programcılar için Kotlin Eğitim Programı: Kursa hoş geldiniz başlıklı makaleyi inceleyin.