Android için Kotlin: sözdizimi temelleri ve özellikler

Yazar: IT Sectr Yayınlanma: 2026-02-10 Okuma süresi: 8 dk

Kotlin, JetBrains tarafından geliştirilen, JVM üzerinde çalışan ve 2017'den beri Google tarafından Android geliştirme için resmi olarak desteklenen statik olarak tiplendirilmiş bir programlama dilidir. Kotlin, Java ile tam uyumludur, kısa ve öz bir sözdizimine ve yerleşik null güvenliğine sahiptir. Kotlin Documentation — dil ve standart kütüphane için eksiksiz bir rehber.

Önemli Noktalar

  • Kotlin — kısa sözdizimi ve null güvenliği ile JetBrains'ten statik olarak tiplendirilmiş JVM dili
  • Null safety — derleyici nullable (String?) ve non-null (String) tiplerini ayırt eder, NullPointerException'ı ortadan kaldırır
  • Data classes — equals, hashCode, toString, copy ve componentN'in otomatik oluşturulması
  • Extension functions — statik çağrılar yoluyla kalıtım olmadan mevcut sınıflara metot ekleme
  • Coroutines — iş parçacığını bloke etmeden suspend fonksiyonları aracılığıyla sıralı stilde asenkron programlama

Kotlin nedir?

Kotlin, JetBrains (IntelliJ IDEA'nın geliştiricisi) tarafından oluşturulan ve Apache 2.0 lisansı altında 2016'da yayınlanan statik olarak tiplendirilmiş bir programlama dilidir. Kotlin, JVM bayt koduna, JavaScript'e ve yerel koda (Kotlin/Native aracılığıyla) derlenir. Başlıca uygulama alanları Android geliştirme, sunucu tarafı uygulamalar ve Platformlar arası projelerdir.

Google, Google I/O 2017'de Kotlin'i Android geliştirmenin resmi dili ilan etti. Google'a (Android Developer Blog, 2026) göre, Google Play'deki yeni projelerin %85'inden fazlası Kotlin kullanıyor. Dil ayrıca sunucu tarafı geliştirmede (Spring Boot, Ktor) ve çoklu platform projelerinde (Kotlin Multiplatform Mobile) aktif olarak kullanılmaktadır.

Kotlin Java ile tam uyumludur — aynı proje içinde Kotlin'den Java kodunu ve tersini çağırabilirsiniz. Derleme araçları (Gradle, Maven) her iki dili de destekler, bu da geliştirmede kesinti olmadan Java'dan Kotlin'e kademeli geçişe olanak tanır.

Android için Kotlin neden Java'dan daha popüler

Ana nedenler: kısalık — Kotlin, aynı görev için Java'dan ortalama %40 daha az kod satırı gerektirir. Null güvenliği — derleyici, kontrol olmadan nullable tiplerinin kullanımını yasaklar. Fonksiyonel yetenekler — yüksek dereceli fonksiyonlar, lambdalar, extension fonksiyonlar ve coroutine'ler kodu daha anlatımlı ve güvenli hale getirir.

Sözdizimi temelleri

Temel Kotlin sözdizimi kısalığı açıklıkla birleştirir. Değişkenler val (değişmez) ve var (değişebilir) ile bildirilir. Derleyici tür çıkarımı kullanır, ancak açık tür bildirimi desteklenir. Fonksiyonlar fun anahtar sözcüğüyle bildirilir.

kotlin
package com.example.intro

// Sabitler ve değişkenler
val appName: String = "KotlinApp"  // değişmez
var version = 1.0  // değişebilir, tür çıkarıldı

// İfade gövdesi olan fonksiyon
fun sum(a: Int, b: Int) = a + b

// String templates
fun greet(name: String) = "Merhaba, $name! Sürüm ${appName}_$version"

// Default and named arguments
fun createUser(
    name: String,
    age: Int = 18,
    email: String? = null
)

When ifadesi Java'daki switch'in yerini alır ve daha esnektir: tür denetimlerini, aralıkları, koşulları ve break olmadan dalları destekler. Derleyici, enum ve sealed sınıfları için kapsamlı kapsamayı denetler. Akıllı dönüşümler, is denetiminden sonra türleri otomatik olarak dönüştürerek açık dönüşümleri ortadan kaldırır.

kotlin
fun analyzeValue(value: Any) = when (value) {
    is String -> "${value.length} uzunluğunda dize"  // akıllı dönüşüm
    is Int -> "Tam sayı: $value"
    in 1..10 -> "1-10 aralığında sayı"
    else -> "Bilinmeyen tür"
}

Null güvenliği ve Elvis operatörleri

Null güvenliği, derleme zamanında NullPointerException'ı ortadan kaldıran temel bir Kotlin özelliğidir. Kotlin'de türler varsayılan olarak null olamaz. Null'a izin vermek için türe ? ekleyin: String?. Derleyici, her nullable değerin açıkça denetlenmesini gerektirir.

kotlin
// Nullable ve non-null türler
val nonNull: String = "Her zaman null değil"
val nullable: String? = null  // izin verildi

// Güvenli çağrı — yalnızca null değilse yürütülür
val length: Int? = nullable?.length

// Elvis operatörü — varsayılan değer
val text: String = nullable ?: "Default text"

// Let — non-null değerle blok yürüt
nullable?.let { value ->
    println("Değer: $value")
}

Güvenli çağrı operatörü (?.), operatörden önceki nesne null ise null döndürür, aksi halde metodu/özelliği çağırır. Elvis operatörü (?:), sol taraf null ise varsayılan bir değer sağlar. Not-null iddiası (!!), değer null ise NullPointerException fırlatır — yalnızca değerin %100 var olduğundan emin olduğunuzda kullanın.

Platform türleri — çağrılan Java kodundan, Kotlin'in nullable veya non-null olarak işaretleyemediği Java türleri. Tür, String! (ünlem işaretiyle) olarak görüntülenir. Java koduyla çalışırken null güvenliğinden geliştirici sorumludur.

Data class'lar ve yapı bozma

Kotlin'deki data class'lar otomatik olarak equals(), hashCode(), toString(), copy() ve componentN() oluşturur. Bu, Java modellerinin (POJO) tekrarlayan kodunu ortadan kaldırır ve kodu temizler. Bir data class bildirimi, Java'daki 20-30 satır yerine bir satır alır.

kotlin
data class User(
    val id: Long,
    val name: String,
    val email: String,
    val age: Int? = null
)

// Kullanım
val user = User(1, "Anna", "anna@example.com")
val updatedUser = user.copy(age = 25)

// Yapı bozma
val (id, name) = user
println("Kullanıcı #$id: $name")

Yapı bozma, bir data class'ı tek satırda değişkenlere ayırmaya olanak tanır. Bu, çiftler, üçlüler ve diğer bileşik değerlerle çalışırken kullanışlıdır. Yapı bozma, data class'lar, standart koleksiyonlar (List, Map) ve operator fun componentN() olan herhangi bir sınıf için desteklenir.

Extension fonksiyonlar

Extension fonksiyonlar, kalıtım olmadan mevcut sınıflara yeni metotlar eklemek için bir Kotlin mekanizmasıdır. Uzantılar, bir alıcı parametresiyle statik metotlara derlenir, bu nedenle kalıtım gerekmez ve sanal gönderim desteklenmez.

kotlin
// String için extension fonksiyon
fun String.isEmail(): Boolean {
    return this.contains("@") && this.contains(".")
}

// Extension özelliği
val String.isPhoneNumber: Boolean
    get() = this.matches(Regex("^\\+?[\\d-]{10,15}$"))

// Koleksiyonlar için genel extension
fun List<Int>.sumOfEvens(): Int {
    return this.filter { it % 2 == 0 }.sum()
}

// Kullanım
println("test@mail.com".isEmail())  // true

Uzantılar, Android SDK ve kütüphanelerinde yaygın olarak kullanılır. Örneğin, Android KTX'teki Activity uzantıları, Activity, Fragment, View ve diğer sınıflar için extension fonksiyonlardır. Uzantılar, bir dosyada üst düzey işlevler olarak veya bir sınıfın üye uzantıları olarak bildirilebilir.

Asenkron programlama için coroutine'ler

Coroutine'ler, sıralı stilde bloke olmayan kod yazmaya olanak tanıyan Kotlin'deki bir asenkron programlama mekanizmasıdır. Bir coroutine, iş parçacığını bloke etmeden bir suspend fonksiyonunda yürütmeyi askıya alır ve işlem tamamlandıktan sonra devam eder. Bu, RxJava geri çağrı zincirlerine ve AsyncTask'e bir alternatiftir.

kotlin
import kotlinx.coroutines.*

// Suspend fonksiyonu — duraklatılabilir
suspend fun fetchUserData(userId: Int): User {
    // delay — suspend fonksiyonu, iş parçacığını bloke etmez
    delay(500)
    return User(userId, "User $userId", "user@example.com")
}

// Coroutine'de başlat
fun loadData() {
    CoroutineScope(Dispatchers.Main).launch {
        val user = fetchUserData(1)  // burada duraklat
        updateUI(user)  // Ana iş parçacığında devam et
    }
}

Dispatchers, bir coroutine için iş parçacığı havuzunu belirler: Dispatchers.Main (UI iş parçacığı), Dispatchers.IO (ağ/disk işlemleri), Dispatchers.Default (CPU yoğun görevler). Yapılandırılmış eşzamanlılık, bir coroutine'in kapsam tamamlandıktan sonra aktif kalmamasını sağlar — bu, bellek sızıntılarını önler.

kotlin
// async/await ile paralel yürütme
suspend fun loadDashboard(): Dashboard = coroutineScope {
    val user = async { fetchUserData(1) }
    val orders = async { fetchOrders(1) }
    val stats = async { fetchStats() }
    
    Dashboard(user.await(), orders.await(), stats.await())
}

Kotlin vs Java: karşılaştırma

Yeni bir Android projesi için Kotlin ve Java arasında seçim yapmak temel bir mimari karardır. Kotlin daha modern bir sözdizimi ve yerleşik güvenlik mekanizmaları sunarken, Java daha geniş bir geliştirici havuzuna ve olgun kütüphanelere sahiptir.

ÖzellikKotlinJava
Null güvenliğiYerleşik (nullable/non-null)Yerleşik değil (@Nullable ek açıklamaları)
Kod hacmiJava'ya göre −%40Tekrarlayan kod (getters/setters)
Data class'lardata class (tek satır)Lombok'lu veya manuel POJO
EşzamansızlıkCoroutine'ler (suspend/await)CompletableFuture, RxJava
Extension fonksiyonlarYerleşikYalnızca yardımcı sınıflar aracılığıyla
Akıllı dönüşümleris denetiminden sonraAçık dönüşüm (Type) obj
Geriye uyumlulukJava ile %100

Performans Kotlin ve Java karşılaştırılabilir — her ikisi de JVM bayt koduna derlenir. Kotlin bazen coroutine'ler ve içe aktarma için mikro ek yük ekler, ancak bu mobil uygulamalar için ihmal edilebilir düzeydedir. Google ve JetBrains, Kotlin'e aktif olarak yatırım yapıyor: Kotlin Multiplatform, Kotlin/Wasm ve K2 derleyici performans iyileştirmeleri.

Sıkça Sorulan Sorular

Kotlin Java'dan nasıl farklıdır?

Kotlin, Java'dan %40 daha kısadır — daha az tekrarlayan kod. Kotlin, null güvenliği, data class'lar, extension fonksiyonlar, coroutine'ler, akıllı dönüşümler, when ifadeleri ekler. Java ile tam uyumluluk: her iki dil de JVM'de çalışır ve çakışma olmadan aynı projede kullanılabilir.

Kotlin'de null güvenliği nasıl çalışır?

Türler varsayılan olarak non-null'dur. Nullable için ?: String? kullanın. Derleyici, nullable değerlere doğrudan erişimi yasaklar. Güvenli çağrı (?.) null alıcıda null döndürür. Elvis operatörü (?:) varsayılan bir değer ayarlar. !! — olası istisna ile zorla çıkarma.

Kotlin'de coroutine'ler nedir?

Coroutine'ler, asenkron kodu sıralı olarak yazmayı sağlayan hafif iş parçacıklarıdır. Suspend fonksiyonları, iş parçacığını bloke etmeden duraklar. launch ve async, CoroutineScope'da coroutine'leri başlatır. Ağ istekleri için Dispatchers.IO, UI güncellemeleri için Dispatchers.Main.

Kotlin'de data class'lar nedir?

data class otomatik olarak equals(), hashCode(), toString(), copy() ve componentN() oluşturur. Örnek: data class User(val name: String, val age: Int). val (name, age) = user ile yapı bozma. Java 14+'taki record'a benzer, ancak ek copy() metoduyla.

Extension fonksiyonlar nasıl çalışır?

Extension fonksiyonlar mevcut sınıflara metot ekler: fun String.isEmail(): Boolean. Derleyici bunları bir alıcı parametresiyle statik çağrılarla değiştirir. Kalıtım gerekmez. Uzantılar Android KTX'te yaygın olarak kullanılır: view.showToast(), activity.viewModels().

Özet

  • Kotlin — JetBrains'ten statik olarak tiplendirilmiş JVM dili, 2017'den beri Android'in resmi dili
  • Null güvenliği — nullable/non-null türler, güvenli çağrı (?.), elvis (??), nullable ile güvenli çalışma için let blokları
  • Data class'lar — equals, hashCode, toString, copy otomatik oluşturma ve yapı bozma
  • Extension fonksiyonlar — kalıtım olmadan herhangi bir sınıfa metot ekleme, statik çağrılara derlenir
  • Coroutine'ler — suspend fonksiyonları, launch/async ve Dispatchers ile sıralı stilde asenkron kod
  • Java ile karşılaştırma — −%40 kod, null güvenliği, akıllı dönüşümler, when ifadeleri ve %100 Java uyumluluğu
  • Kotlin Multiplatform — Kotlin yalnızca Android için değil, aynı zamanda iOS (KMM) ve sunucular (Ktor, Spring) için de kullanılır

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun