Neler yeni

Yazılım Forum

Tüm özelliklerimize erişmek için şimdi bize katılın. Kayıt olduktan ve giriş yaptıktan sonra konu oluşturabilecek, mevcut konulara yanıt gönderebilecek, itibar kazanabilecek, özel mesajlaşmaya erişebilecek ve çok daha fazlasını yapabileceksiniz! Bu hizmetlerimiz ise tamamen ücretsiz ve kurallara uyulduğu sürece sınırsızdır, o zaman ne bekliyorsunuz? Hadi, sizde aramıza katılın!

Kotlin Programlama Temellerine Kapsamlı Bir Giriş: Sıfırdan Uzmanlığa İlk Adımlar

Kotlin Programlama Temelleri: Modern, Güvenli ve Etkili Bir Dil!

Merhaba geliştiriciler ve kodlamaya meraklı herkes! Günümüz yazılım dünyasında, hızla yükselen ve giderek daha popüler hale gelen bir programlama dili var: Kotlin. JetBrains tarafından geliştirilen ve 2017'de Google tarafından Android geliştirmede birinci sınıf dil olarak ilan edilen Kotlin, Java ile tam uyumluluğu, daha az kodla daha fazlasını yapabilme yeteneği ve en önemlisi null Pointer Exception gibi yaygın hataları en aza indiren mükemmel null güvenliği ile dikkat çekiyor. Bu kapsamlı rehberde, Kotlin'in temellerini sıfırdan ele alacak, dilin ana yapı taşlarını öğrenecek ve kendi Kotlin programlarınızı yazmaya başlayacaksınız.

Neden Kotlin?

Kotlin, birçok avantajıyla geliştiricilerin favorisi haline gelmiştir:

  • Kısa ve Anlaşılır Kod: Java'ya kıyasla çok daha az kod satırı ile aynı işlevi gerçekleştirmenizi sağlar, bu da kod okunabilirliğini ve bakımını artırır.
  • Null Güvenliği: En sık karşılaşılan hatalardan biri olan null Pointer Exception'ları derleme zamanında tespit ederek ortadan kaldırır. Bu konu üzerinde detaylı duracağız.
  • Java ile Tam Uyumluluk: Mevcut Java projelerinizde Kotlin kodunu kullanabilir veya Kotlin projelerinizde Java kütüphanelerini çağırabilirsiniz. Bu, geçişi son derece kolaylaştırır.
  • Çoklu Platform Desteği: Sadece Android için değil, sunucu tarafı uygulamalar (JVM), web (JavaScript) ve hatta yerel uygulamalar (Kotlin/Native) geliştirmek için de kullanılabilir.
  • Modern Dil Özellikleri: Genişletme fonksiyonları, veri sınıfları (data classes), coroutine'ler gibi modern programlama paradigmsını destekleyen birçok özelliğe sahiptir.

Bu girişin ardından, Kotlin'in temel sözdizimi ve yapı taşlarına dalalım.

1. Kotlin'in Temel Sözdizimi

Her programlama dilinde olduğu gibi, Kotlin'in de kendine özgü bir sözdizimi vardır. İlk olarak bir Kotlin programının giriş noktası olan 'main' fonksiyonuna ve değişken tanımlamalarına bakalım.

Main Fonksiyonu: Bir Kotlin uygulaması, programın yürütülmeye başladığı ana fonksiyon olan 'main' fonksiyonu ile başlar.

Kod:
fun main() {
    println("Merhaba, Kotlin Dünyası!")
}

Bu basit kod parçası, konsola "Merhaba, Kotlin Dünyası!" yazdırır. `println` fonksiyonu, metni yazdırıp yeni bir satıra geçmek için kullanılır.

Değişkenler: Kotlin'de değişkenler iki ana anahtar kelime ile tanımlanır: `val` ve `var`.

  • val (value): Değiştirilemez (immutable) değişkenler için kullanılır. Bir kez atama yapıldıktan sonra değeri değiştirilemez. Java'daki `final` anahtar kelimesine benzer.
  • var (variable): Değiştirilebilir (mutable) değişkenler için kullanılır. Atama yapıldıktan sonra değeri değiştirilebilir.

Kod:
fun main() {
    val ad: String = "Alperen"
    // ad = "Mehmet" // Hata verir: Val cannot be re-assigned

    var yas: Int = 30
    yas = 31 // Geçerli: var değişkeni değiştirilebilir

    println("Ad: $ad, Yaş: $yas") // String şablonları

    // Tip çıkarımı (Type Inference)
    val pi = 3.14 // Kotlin otomatik olarak Double olduğunu anlar
    var mesaj = "Kotlin harika!" // Kotlin otomatik olarak String olduğunu anlar
}

Veri Tipleri: Kotlin, temel veri tiplerine sahiptir: `Int`, `Double`, `Float`, `Long`, `Short`, `Byte`, `Boolean`, `Char`, `String`. Tip çıkarımı sayesinde çoğu zaman açıkça belirtmenize gerek kalmaz, ancak belirtmek kod okunabilirliğini artırabilir.

2. Kontrol Akış Yapıları

Programların davranışını yönlendirmek için kontrol akış yapıları kullanılır. Kotlin'de `if/else`, `when` ve döngüler (`for`, `while`, `do-while`) bulunur.

Koşullu İfadeler: if/else

Kotlin'deki `if/else` ifadesi, Java'dakine benzer ancak aynı zamanda bir ifade (expression) olarak da kullanılabilir, yani bir değer döndürebilir.

Kod:
fun main() {
    val not = 75
    val sonuc = if (not >= 50) {
        "Geçti"
    } else {
        "Kaldı"
    }
    println("Durum: $sonuc") // Çıktı: Durum: Geçti

    val sayi = 10
    if (sayi % 2 == 0) {
        println("Sayı çift.")
    } else {
        println("Sayı tek.")
    }
}

Çoklu Koşullar İçin: when İfadesi

`when` ifadesi (Java'daki `switch`'in gelişmiş hali), birden çok koşulu ele almak için güçlü ve okunabilir bir yoldur. Ayrıca bir ifade olarak da kullanılabilir.

Kod:
fun main() {
    val gun = 3
    val gunAdi = when (gun) {
        1 -> "Pazartesi"
        2 -> "Salı"
        3 -> "Çarşamba"
        4 -> "Perşembe"
        5 -> "Cuma"
        in 6..7 -> "Hafta Sonu"
        else -> "Geçersiz Gün"
    }
    println("Bugün: $gunAdi") // Çıktı: Bugün: Çarşamba

    val karakter = 'a'
    when (karakter) {
        'a', 'e', 'i', 'o', 'u' -> println("Sesli harf")
        else -> println("Sessiz harf")
    }
}

Döngüler: for, while, do-while

  • for Döngüsü: Bir aralık, dizi veya koleksiyon üzerinde yineleme yapmak için kullanılır.
    Kod:
    fun main() {
        for (i in 1..5) { // 1'den 5'e (dahil) kadar sayılar
            println("Sayı: $i")
        }
    
        val meyveler = listOf("Elma", "Armut", "Çilek")
        for (meyve in meyveler) {
            println("Meyve: $meyve")
        }
    
        for ((index, value) in meyveler.withIndex()) {
            println("Index $index: $value")
        }
    }
  • while Döngüsü: Belirtilen koşul doğru olduğu sürece kod bloğunu tekrar tekrar yürütür.
    Kod:
    fun main() {
        var i = 0
        while (i < 3) {
            println("While döngüsü: $i")
            i++
        }
    }
  • do-while Döngüsü: Kod bloğunu en az bir kez yürütür, ardından koşulu kontrol eder.
    Kod:
    fun main() {
        var j = 0
        do {
            println("Do-While döngüsü: $j")
            j++
        } while (j < 3)
    }

3. Fonksiyonlar

Fonksiyonlar, belirli bir görevi yerine getiren yeniden kullanılabilir kod bloklarıdır. Kotlin'de fonksiyonlar `fun` anahtar kelimesi ile tanımlanır.

Kod:
// Parametresiz ve dönüş değeri olmayan fonksiyon
fun selamlama() {
    println("Merhaba Kotlin!")
}

// Parametreli ve dönüş değeri olan fonksiyon
fun topla(a: Int, b: Int): Int {
    return a + b
}

// Tek satırlık fonksiyonlar (infix fonksiyonlar da olabilir)
fun carp(a: Int, b: Int) = a * b

fun main() {
    selamlama()
    val toplam = topla(5, 3)
    println("Toplam: $toplam") // Çıktı: Toplam: 8

    val carpim = carp(4, 6)
    println("Çarpım: $carpim") // Çıktı: Çarpım: 24

    // Varsayılan argümanlar
    mesajGonder("Merhaba")
    mesajGonder("Selam", "Gizem")

    // İsimlendirilmiş argümanlar
    mesajGonder(kime = "Ahmet", mesaj = "Nasılsın?")
}

fun mesajGonder(mesaj: String, kime: String = "Dünya") {
    println("$mesaj, $kime!")
}

4. Null Güvenliği: Kotlin'in Altın Kuralı

"The Billion Dollar Mistake" olarak bilinen null Pointer Exception (NPE), Java'daki en yaygın ve can sıkıcı hatalardan biridir. Kotlin, bu hatayı derleme zamanında ele alarak güvenliği artırır ve programınızı daha kararlı hale getirir.

Kotlin'de, bir değişkenin null değer alıp alamayacağı tip sistemi tarafından belirlenir.

  • Non-nullable (null olamaz): Varsayılan olarak, Kotlin'de tanımlanan değişkenler null değer alamaz. Eğer null atamaya çalışırsanız, derleme hatası alırsınız.
    Kod:
    var metin: String = "Hello"
    // metin = null // Derleme hatası
  • Nullable (null olabilir): Bir değişkenin null değer alabileceğini belirtmek için tipin sonuna `?` (soru işareti) eklenir.
    Kod:
    var nullMetin: String? = "Nullable Hello"
    nullMetin = null // Geçerli
    
    println(nullMetin)

    Bir nullable değişkene erişirken, Kotlin sizi olası bir null değer durumu için önlem almaya zorlar. Bunun için çeşitli operatörler kullanılır:
  • Güvenli Çağrı Operatörü (Safe Call Operator): ?. Eğer değişken null değilse işlemi yapar, null ise `null` döndürür.
    Kod:
    val uzunluk = nullMetin?.length // Eğer nullMetin null ise uzunluk da null olur
    println(uzunluk)
  • Elvis Operatörü (Elvis Operator): ?: Güvenli çağrı operatörü ile birlikte kullanılır. Eğer sol taraf null ise, sağdaki varsayılan değeri döndürür.
    Kod:
    val adUzunlugu = nullMetin?.length ?: 0 // nullMetin null ise 0 döndürür
    println(adUzunlugu) // Çıktı: 0 (çünkü nullMetin null idi)
    
    val mevcutIsim: String? = "Ayşe"
    val isimUzunlugu = mevcutIsim?.length ?: -1
    println(isimUzunlugu) // Çıktı: 4
  • Kesin Olmayan Operatör (Non-null Asserted Call Operator): !! Bu operatör, bir değişkenin kesinlikle null olmadığını garanti ettiğinizde kullanılır. Ancak eğer değişken null ise, bu operatör bir `NullPointerException` fırlatır. Bu nedenle, gerçekten gerekli olmadıkça kullanmaktan kaçınılmalıdır.
    Kod:
    // val kesinNullMetin: String? = null
    // val uzunlukGuvenliksiz = kesinNullMetin!!.length // NullPointerException fırlatır!

5. Sınıflar ve Nesneler (Kısa Bir Giriş)

Nesne Yönelimli Programlama (OOP) dillerinde sınıflar, nesnelerin blueprint'idir (taslağı). Kotlin'de bir sınıf tanımlamak oldukça basittir.

Kod:
class Ogrenci(val ad: String, var yas: Int) {
    fun bilgileriGoster() {
        println("Ad: $ad, Yaş: $yas")
    }
}

fun main() {
    val ogrenci1 = Ogrenci("Merve", 22) // Nesne oluşturma
    ogrenci1.bilgileriGoster() // Metodu çağırma

    ogrenci1.yas = 23 // var olduğu için yas değiştirilebilir
    ogrenci1.bilgileriGoster()

    val ogrenci2 = Ogrenci("Burak", 25)
    ogrenci2.bilgileriGoster()
}

6. Koleksiyonlar

Koleksiyonlar, verileri depolamak ve düzenlemek için kullanılan yapılardır. Kotlin'de Listeler, Setler ve Haritalar en yaygın kullanılan koleksiyonlardır. Kotlin, bu koleksiyonlar için immutable (değiştirilemez) ve mutable (değiştirilebilir) versiyonlar sunar.

  • Listeler (List): Sıralı öğe koleksiyonlarıdır. Öğeler indeks aracılığıyla erişilebilir. `listOf()` ile immutable, `mutableListOf()` ile mutable liste oluşturulur.
    Kod:
    val sayilar = listOf(1, 2, 3, 4, 5)
    println(sayilar[0]) // Çıktı: 1
    println(sayilar.size) // Çıktı: 5
    
    val mutableSayilar = mutableListOf(10, 20, 30)
    mutableSayilar.add(40)
    mutableSayilar.remove(10)
    println(mutableSayilar) // Çıktı: [20, 30, 40]
  • Setler (Set): Benzersiz öğe koleksiyonlarıdır. Aynı öğeden birden fazla olamaz. `setOf()` ile immutable, `mutableSetOf()` ile mutable set oluşturulur.
    Kod:
    val benzersizSayilar = setOf(1, 2, 2, 3, 4, 4, 5)
    println(benzersizSayilar) // Çıktı: [1, 2, 3, 4, 5]
    
    val mutableRenkler = mutableSetOf("Kırmızı", "Mavi", "Yeşil")
    mutableRenkler.add("Sarı")
    mutableRenkler.add("Kırmızı") // Eklenmez çünkü zaten var
    println(mutableRenkler) // Çıktı: [Kırmızı, Mavi, Yeşil, Sarı]
  • Haritalar (Map): Anahtar-değer çiftlerini saklayan koleksiyonlardır. Her anahtar benzersizdir. `mapOf()` ile immutable, `mutableMapOf()` ile mutable map oluşturulur.
    Kod:
    val ogrenciNotlari = mapOf("Ali" to 85, "Ayşe" to 92, "Can" to 78)
    println(ogrenciNotlari["Ayşe"]) // Çıktı: 92
    
    val mutableSiparisler = mutableMapOf(1 to "Elma", 2 to "Armut")
    mutableSiparisler[3] = "Çilek"
    mutableSiparisler.put(1, "Muz") // Anahtarı 1 olan değeri günceller
    println(mutableSiparisler) // Çıktı: {1=Muz, 2=Armut, 3=Çilek}

7. Sonuç ve İleri Adımlar

Bu rehberde Kotlin programlama dilinin temellerini, değişkenleri, kontrol akış yapılarını, fonksiyonları, null güvenliğini, sınıfları ve koleksiyonları öğrendiniz. Kotlin, modern yazılım geliştirme için güçlü, esnek ve keyifli bir dildir.

1200px-Kotlin_logo.svg.png


Öğrenmeye devam etmek için aşağıdaki kaynakları kullanabilirsiniz:

  • Kotlin Resmi Dokümantasyonu: Dil hakkında en güncel ve kapsamlı bilgilere ulaşabileceğiniz yer.
  • Kotlin Playground: Tarayıcınız üzerinden Kotlin kodu yazıp çalıştırabileceğiniz online bir araç.
  • Çeşitli online kurslar ve kitaplar.

Kotlin yolculuğunuza devam ederken, daha ileri konular olan Coroutines (eşzamanlı programlama), Extension Functions (genişletme fonksiyonları), Data Classes (veri sınıfları), Sealed Classes (mühürlü sınıflar) ve Delegates (delegeler) gibi konuları araştırmayı unutmayın. Bol kodlu günler dilerim!

Bu rehber, Kotlin'e sağlam bir başlangıç yapmanız için tasarlanmıştır. Uygulama yaparak ve farklı projeler üzerinde çalışarak bilginizi pekiştirmeniz en iyi öğrenme yöntemidir.
 
shape1
shape2
shape3
shape4
shape5
shape6
Üst

Bu web sitenin performansı Hazal Host tarafından sağlanmaktadır.

YazilimForum.com.tr internet sitesi, 5651 sayılı Kanun’un 2. maddesinin 1. fıkrasının (m) bendi ve aynı Kanun’un 5. maddesi kapsamında Yer Sağlayıcı konumundadır. Sitede yer alan içerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır.

YazilimForum.com.tr, kullanıcılar tarafından paylaşılan içeriklerin doğruluğunu, güncelliğini veya hukuka uygunluğunu garanti etmez ve içeriklerin kontrolü veya araştırılması ile yükümlü değildir. Kullanıcılar, paylaştıkları içeriklerden tamamen kendileri sorumludur.

Hukuka aykırı içerikleri fark ettiğinizde lütfen bize bildirin: lydexcoding@gmail.com

Sitemiz, kullanıcıların paylaştığı içerik ve bilgileri 6698 sayılı KVKK kapsamında işlemektedir. Kullanıcılar, kişisel verileriyle ilgili haklarını KVKK Politikası sayfasından inceleyebilir.

Sitede yer alan reklamlar veya üçüncü taraf bağlantılar için YazilimForum.com.tr herhangi bir sorumluluk kabul etmez.

Sitemizi kullanarak Forum Kuralları’nı kabul etmiş sayılırsınız.

DMCA.com Protection Status Copyrighted.com Registered & Protected