Kotlin Cheat Sheet
Son güncelleme
Hello World ve temeller
Bir Kotlin programı üst düzey bir main fonksiyonuyla başlar; sınıf gerekmez.
| Sözdizimi | Anlamı |
|---|---|
fun main() { println("Hello") } | Programın giriş noktası |
println("text") | Standart çıktıya bir satır yazdır |
print("text") | Sonda satır sonu olmadan yazdır |
// comment | Tek satırlık yorum |
/* comment */ | Çok satırlı yorum |
val input = readLine() | stdin'den bir satır oku (nullable String?) |
val line = readln() | stdin'den bir satır oku (non-null, Kotlin 1.6+) |
Değişkenler (val / var) ve tipler
val'ı tercih et; var'a yalnızca değerin değişmesi gerektiğinde başvur.
| Sözdizimi | Anlamı |
|---|---|
val name = "Ada" | Salt okunur değişken, tipi String olarak çıkarılır |
var count = 0 | Değiştirilebilir değişken |
val age: Int = 30 | Açık tip belirtimi |
Int, Long, Double, Float | Sayısal tipler (42, 42L, 3.14, 3.14f) |
Boolean, Char, String | true/false, 'a', "metin" |
val big = 1_000_000 | Okunabilir sabitler için alt çizgi |
"3".toInt(), "2.5".toDouble() | String'i sayıya çevir |
42.toString() | Sayıdan string'e |
const val MAX = 10 | Derleme zamanı sabiti (üst düzeyde ya da bir object içinde) |
String'ler ve şablonlar
String şablonları neredeyse her yerde birleştirmenin yerini alır.
| Sözdizimi | Anlamı |
|---|---|
"Hi, $name" | String'e değişken ekle |
"Total: ${price * qty}" | İfade ekle |
s.length | Karakter sayısı |
s.uppercase(), s.lowercase() | Büyük/küçük harf değiştir |
s.trim() | Baştaki ve sondaki boşlukları kaldır |
s.contains("x"), s.startsWith("a") | String içinde ara |
s.substring(0, 3) | İndeks aralığıyla dilimle |
s.split(",") | List<String>'e böl |
s[0] | Belirli indeksteki karakter |
"""raw text""" | Ham çok satırlı string, kaçış karakteri yok |
"%.2f".format(3.14159) | Biçimlendirilmiş çıktı (3.14) |
Null güvenliği
Bir tip varsayılan olarak null olamaz; null'a izin vermek için ? ekle, derleyici bunu ele almanı zorunlu kılar.
| Sözdizimi | Anlamı |
|---|---|
var s: String? = null | Nullable tip |
s?.length | Güvenli çağrı: s null ise null döner |
s?.length ?: 0 | Elvis operatörü: null olduğunda yedek değer |
s!!.length | Non-null onayı: s null ise hata fırlatır |
if (s != null) s.length | Kontrol içinde non-null'a smart cast |
s?.let { println(it) } | Bloğu yalnızca null değilse çalıştır |
val n = s?.toIntOrNull() | Çevir, geçersiz girdide null döndür |
lateinit var x: String | Sonradan ilklendirilen non-null değişken |
Operatörler
| Operatör | Anlamı |
|---|---|
+ - * / % | Aritmetik (Int'lerde / tam sayı bölmesidir) |
+= -= *= /= %= | Birleşik atama |
++ -- | Artırma / azaltma |
== != | Yapısal eşitlik (equals çağırır) |
=== !== | Referans eşitliği (aynı nesne) |
< > <= >= | Karşılaştırma |
&& || ! | Mantıksal ve / veya / değil |
a in 1..10 | Aralık ya da koleksiyon üyeliği |
x as Int, x as? Int | Dönüşüm / güvenli dönüşüm (başarısızlıkta null) |
x is String | Tip kontrolü (başarıda smart cast) |
Akış kontrolü (if / when)
if ve when birer ifadedir; değer döndürürler.
| Sözdizimi | Anlamı |
|---|---|
if (a > b) x else y | İfade olarak if (Kotlin'de ?: üçlü operatörü yoktur) |
if (c) { ... } else if (d) { ... } else { ... } | Zincirleme dallar |
when (x) { 1 -> "one"; 2 -> "two"; else -> "other" } | Bir değerle eşleştir |
when (x) { 1, 2 -> "low" } | Bir dalda birden çok değer |
when (x) { in 1..9 -> "digit" } | Bir aralıkla eşleştir |
when (x) { is String -> x.length } | Bir tiple eşleştir (smart cast ile) |
when { x < 0 -> "neg"; x == 0 -> "zero"; else -> "pos" } | Öznesiz when, if/else if gibi |
val label = when (x) { ... } | İfade olarak when (else gerekir) |
Döngüler ve aralıklar
| Sözdizimi | Anlamı |
|---|---|
for (i in 1..5) | 1'den 5'e kapalı aralık |
for (i in 1 until 5) | 1'den 4'e (son hariç) |
for (i in 0..<5) | Aynısı, açık uçlu aralık sözdizimi (Kotlin 1.9+) |
for (i in 10 downTo 1 step 2) | Adımlarla geri say |
for (item in list) | Koleksiyon üzerinde dolaş |
for ((i, item) in list.withIndex()) | İndeks ve eleman birlikte |
for (ch in "abc") | String'in karakterleri üzerinde dolaş |
while (cond) { ... } | Doğru olduğu sürece döngü |
do { ... } while (cond) | En az bir kez çalıştır |
break, continue | Döngüden çık / sonraki yinelemeye atla |
repeat(3) { println(it) } | Bloğu n kez çalıştır |
Fonksiyonlar
| Sözdizimi | Anlamı |
|---|---|
fun add(a: Int, b: Int): Int { return a + b } | Fonksiyon tanımla |
fun add(a: Int, b: Int) = a + b | Tek ifadeli fonksiyon, dönüş tipi çıkarılır |
fun greet(name: String = "world") | Varsayılan parametre değeri |
greet(name = "Ada") | İsimli argüman |
fun log(vararg items: String) | Değişken sayıda argüman |
fun say(): Unit | Dönüş değeri yok (Unit isteğe bağlı) |
val square = { x: Int -> x * x } | Değişkende saklanan lambda |
fun String.shout() = uppercase() + "!" | Uzantı fonksiyonu |
fun apply(f: (Int) -> Int) = f(2) | Parametre olarak fonksiyon |
list.map { it * 2 } | Sondaki lambda, it tek parametredir |
Listeler
listOf salt okunurdur; mutableListOf değiştirilebilir.
| Sözdizimi | Anlamı |
|---|---|
val nums = listOf(1, 2, 3) | Salt okunur liste |
val items = mutableListOf("a") | Değiştirilebilir liste |
nums[0], nums.first(), nums.last() | Elemanlara eriş |
nums.getOrNull(9) | Güvenli erişim, aralık dışında null |
items.add("b"), items.remove("a") | Ekle / kaldır |
items[0] = "z" | İndekse göre değiştir |
nums.size, nums.isEmpty() | Boyut ve boş olma |
x in nums, nums.contains(x) | Üyelik |
nums.indexOf(2) | Elemanın konumu, yoksa -1 |
nums.subList(0, 2) | Dilim (son hariç) |
nums.take(2), nums.drop(1) | İlk n / ilk n hariç hepsi |
nums.sorted(), nums.reversed() | Yeni sıralı / ters çevrilmiş liste |
nums.sum(), nums.average(), nums.maxOrNull() | Toplu işlemler |
nums.joinToString(", ") | Tek string'de birleştir |
Pair(1, "a"), 1 to "a", Triple(1, 2, 3) | Küçük sabit demetler |
Map'ler ve set'ler
| Sözdizimi | Anlamı |
|---|---|
val m = mapOf("a" to 1, "b" to 2) | Salt okunur map |
val mm = mutableMapOf<String, Int>() | Değiştirilebilir map |
m["a"] | Arama (yoksa null) |
m.getOrDefault("z", 0) | Yedek değerle arama |
mm["c"] = 3 | Ekle veya güncelle |
for ((k, v) in m) | Girdileri yapı çözme ile dolaş |
m.keys, m.values | Anahtar / değer koleksiyonları |
"a" in m | Anahtar üyeliği |
val s = setOf(1, 2, 2) | Benzersiz değerler kümesi ({1, 2}) |
mutableSetOf<Int>() | Değiştirilebilir set |
Koleksiyon işlemleri (lambdalar)
| Sözdizimi | Anlamı |
|---|---|
list.map { it * 2 } | Her elemanı dönüştür |
list.filter { it > 2 } | Eşleşen elemanları tut |
list.forEach { println(it) } | Her elemanla bir şey yap |
list.any { it > 2 }, list.all { it > 0 } | Herhangi / her eleman eşleşiyor mu |
list.count { it % 2 == 0 } | Eşleşmeleri say |
list.find { it > 2 } | İlk eşleşme ya da null |
list.sortedBy { it.length } | Anahtara göre sırala |
list.groupBy { it.first() } | Map olarak grupla |
list.distinct() | Tekrarları kaldır |
list.fold(0) { acc, x -> acc + x } | Başlangıç değeriyle indirge |
list.zip(other) | İki listeyi eşleştir |
list.flatMap { it.toList() } | Dönüştür sonra düzleştir |
Sınıflar ve data class'lar
| Sözdizimi | Anlamı |
|---|---|
class User(val name: String, var age: Int) | Birincil yapıcı ve özelliklerle sınıf |
val u = User("Ada", 36) | Örnek oluştur (new yok) |
u.name, u.age = 37 | Özellikleri oku / yaz |
data class Point(val x: Int, val y: Int) | equals, hashCode, toString, copy bedavaya |
p.copy(y = 5) | Bazı özellikleri değiştirilmiş kopya |
val (x, y) = p | Yapı çözme bildirimi |
open class Base, class Sub : Base() | Kalıtım (sınıflar varsayılan olarak final) |
override fun toString() = "..." | Bir üyeyi geçersiz kıl |
object Config { val debug = true } | Singleton |
companion object { fun create() = User("", 0) } | Statik benzeri üyeler |
enum class Color { RED, GREEN } | Enum |
sealed class Result | Kısıtlı sınıf hiyerarşisi, when içinde eksiksiz |
interface Shape { fun area(): Double } | Arayüz |
Hata yönetimi
| Sözdizimi | Anlamı |
|---|---|
try { ... } catch (e: Exception) { ... } | İstisna yakala |
try { ... } finally { ... } | Temizliği her zaman çalıştır |
val n = try { s.toInt() } catch (e: NumberFormatException) { 0 } | İfade olarak try |
throw IllegalArgumentException("bad") | İstisna fırlat |
require(x > 0) { "x must be positive" } | Argüman kontrolü (IllegalArgumentException fırlatır) |
check(ready) { "not ready" } | Durum kontrolü (IllegalStateException fırlatır) |
s.toIntOrNull() | Fırlatmak yerine null döndür |
runCatching { risky() }.getOrDefault(0) | Çağrıyı Result içine sar |
Kapsam fonksiyonları
Bir blok içinde nesneyle çalışmak için beş küçük yardımcı.
| Sözdizimi | Anlamı |
|---|---|
x.let { it + 1 } | it nesnedir, blok sonucunu döndürür |
x.run { this + 1 } | this nesnedir, blok sonucunu döndürür |
x.apply { field = 1 } | this nesnedir, nesneyi döndürür |
x.also { println(it) } | it nesnedir, nesneyi döndürür |
with(x) { field } | Uzantı değil; this x'tir, blok sonucunu döndürür |
x?.let { ... } | Deyimsel null kontrolü + kullanım |
Aradığın her Kotlin sözdizimi tek sayfada. Bu Kotlin cheat sheet, Android'in ve modern JVM'in büyük kısmının arkasındaki dil için hızlı bir başvuru: değişken tanımlama, null'ları güvenle ele alma, when ile dallanma, aralıklarda döngü, fonksiyon yazma ve listelerle map'lerle çalışma.
Buradaki her şey standart Kotlin'dir; JVM'de, Android'de ve Kotlin Multiplatform'da aynı şekilde çalışır. İhtiyacın olanı kopyala ya da Kotlin playground'da canlı dene: bir parçayı yapıştır, Run'a bas ve çıktıyı tarayıcında gör.
Kotlin cheat sheet SSS
Bu Kotlin cheat sheet ücretsiz mi?
when dalına, bir null güvenliği operatörüne ya da bir koleksiyon metoduna bakman gerektiğinde geri dön.Kotlin'de val ile var arasındaki fark nedir?
val salt okunur bir referans tanımlar: bir kez atanır ve yeniden atanamaz. var yeniden atanabilen değiştirilebilir bir değişken tanımlar. val yalnızca referansı sabitler: val list = mutableListOf(1) listesine hâlâ eleman eklenebilir. Kotlin tarzı her yerde val kullanmak ve yalnızca yeniden atama gerçekten gerektiğinde var'a geçmektir.Kotlin'de null güvenliği nasıl çalışır?
String asla null tutamaz, String? tutabilir. Derleyici, null durumunu ele almadan nullable bir değer üzerinde metot çağırmana izin vermez: güvenli çağrı (s?.length), Elvis ile yedek değer (s?.length ?: 0), smart cast yapan bir null kontrolü (if (s != null)) ya da son çare olarak değer gerçekten null ise NullPointerException fırlatan s!! non-null onayı.Kotlin'de ne zaman if yerine when kullanmalıyım?
when, tek bir evet/hayır koşulu için if/else kullan. İkisi de ifadedir; val label = when (x) { ... } ve val label = if (c) a else b deyimseldir. İfade olarak kullanılan bir when eksiksiz olmalıdır, bu da genellikle bir else dalı eklemek demektir (sealed class'lar ve enum'lar onsuz da eksiksiz olabilir).Kotlin'i online pratik edebilir miyim?
when'e, döngülere, fonksiyonlara ve koleksiyonlara götürür ve sonunda ücretsiz bir sertifika verir.