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:
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.
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`.
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.
Ç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.
Döngüler: for, while, do-while
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.
4. Null Güvenliği: Kotlin'in Altın Kuralı
Kotlin'de, bir değişkenin null değer alıp alamayacağı tip sistemi tarafından belirlenir.
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.
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.
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.
Öğrenmeye devam etmek için aşağıdaki kaynakları kullanabilirsiniz:
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.
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.

Öğ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.