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
- Henüz açılmadıysa IntelliJ IDEA'yı açın.
- 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.
- REPL alanına aşağıdaki ifadeleri girin. Sonucu görmek için her birinin ardından
Control+Enter
(Mac'teCommand+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.
- 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
- 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.
- 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
- 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.
- Listeden
toByte()
'i seçin, ardından değişkeni yazdırın.
val b1 = i.toByte()
println(b1)
⇒ 6
- 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
- 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
- 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.
- Değişkenleri
val
vevar
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.
- 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.
- 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
- İç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.
- Bir
if
/else
ifadesi yazın.
val numberOfFish = 50
val numberOfPlants = 23
if (numberOfFish > numberOfPlants) {
println("Good ratio!")
} else {
println("Unhealthy ratio")
}
⇒ Good ratio!
- 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
- 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!
- Bir
when
ifadesi deneyin. Kotlin'dekiif
/else if
/else
ifade dizisini yazmanın daha iyi bir yolu var. Bu ifade, diğer dillerdekiswitch
ifadesine benzeyenwhen
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.
- Bir
Int
tanımlayın ve onanull
atayın.
var rocks: Int = null
⇒ error: null can not be a value of a non-null type Int
- Değişkenin boş olabileceğini belirtmek için türden sonra
?
olan soru işareti operatörünü kullanın. BirInt?
tanımlayın ve onanull
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.
fishFoodTreats
değişkenininnull
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()
}
- Şimdi
?
operatörünü kullanarak Kotlin ile yazma yöntemini inceleyin.
var fishFoodTreats = 6
fishFoodTreats = fishFoodTreats?.dec()
?:
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.
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]
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.
arrayOf
kullanarak bir dize dizisi bildirin. Yazdırmak içinjava.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]
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)
- 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)
- İ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
- İç 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.
- 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.
- 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
- 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
- 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
- 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
verepeat
ile döngü oluşturabilirsiniz.when
ifadesi, Kotlin' uygulamasınınswitch
ifadesidir, ancakwhen
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.
- Uygunsuz dönüşüm dönüşümü
- Değişkenleri tanımlama
- Dize şablonları
- Ulaşılabilir değerler
- Listeler
- Diziler
if
,when
,for
,while
?:
(Elvis) operatörü!!
operatörü
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:
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.