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.