0Pricing
Kotlin Academy · Ders

Özel İstisna Sınıfları Oluşturma

Anlamlı iletiler ve özelliklerle alana özgü istisnalar tanımlayın.

Özel İstisna Sınıfları Oluşturma, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Özel Durumlar Neden Kullanılır

Özel durumlar alan anlamını kodlar: çağıranlar bunları özel olarak yakalayabilir, yararlı iletiler alabilir ve türe göre farklı davranabilir.

En Basit Özel Durum

Exception sınıfını (veya RuntimeException gibi belirli bir alt sınıfı) türetin ve üst oluşturucuya bir ileti geçirin.

class InvalidEmailException(message: String) : Exception(message)
fun main() {
    try {
        throw InvalidEmailException("missing @")
    } catch (e: InvalidEmailException) {
        println("caught: ${e.message}")
    }
}

Özelliklere Sahip Özel Durum

Bağlamı aktarmak için alanlar ekleyin: HTTP durumu, alan adı, yeniden deneme sayısı vb.

class HttpError(
    message: String,
    val statusCode: Int
) : Exception(message)
fun main() {
    try {
        throw HttpError("Not Found", 404)
    } catch (e: HttpError) {
        println("HTTP ${e.statusCode}: ${e.message}")
    }
}

Nedene Sahip Özel Durum

Özgün özel durumu zincirde korumak için bir cause geçirin.

class DatabaseError(message: String, cause: Throwable) : Exception(message, cause)
fun main() {
    try {
        try { error("connection refused") }
        catch (e: Throwable) { throw DatabaseError("query failed", e) }
    } catch (e: DatabaseError) {
        println("${e.message} (caused by: ${e.cause?.message})")
    }
}

Checked ve Unchecked

Kotlin tüm özel durumları unchecked olarak ele alır (throws bildirimi gerekmez). Geleneksel olarak RuntimeException sınıfından türetin.

class ValidationException(field: String, message: String) :
    RuntimeException("[$field] $message")
fun main() {
    try {
        throw ValidationException("age", "must be positive")
    } catch (e: ValidationException) {
        println(e.message)
    }
}

Alan Özel Durumları Hiyerarşisi

Çağıranların genel işleme için bir temel türü veya özel durumlar için belirli alt türleri yakalayabilmesi amacıyla bir hiyerarşi oluşturun.

open class AppException(message: String) : RuntimeException(message)
class NotFoundException(what: String) : AppException("$what not found")
class UnauthorizedException : AppException("not authorized")
fun main() {
    val errors = listOf(NotFoundException("user"), UnauthorizedException())
    for (e in errors) {
        try { throw e }
        catch (e: AppException) { println("App error: ${e.message}") }
    }
}

Mühürlü Özel Durum Hiyerarşisi

Sınırlı hata türü kümeleri için sealed bir hiyerarşi kullanın; çağıranlar her çeşidi eksiksiz biçimde ele alabilir.

sealed class ApiError(message: String) : RuntimeException(message) {
    class Timeout : ApiError("timeout")
    class NotFound(val id: String) : ApiError("not found: $id")
    class ServerError(val status: Int) : ApiError("server returned $status")
}
fun describe(e: ApiError) = when (e) {
    is ApiError.Timeout -> "request timed out"
    is ApiError.NotFound -> "id ${e.id} missing"
    is ApiError.ServerError -> "5xx: ${e.status}"
}
fun main() {
    println(describe(ApiError.NotFound("user-42")))
}

Adlandırma Kuralı

Anlaşılır olması için özel durum sınıfı adlarını Exception veya Error ile bitirin. Geçmiş zaman ya da isim kullanın (ör. NotFound, InvalidInput).

class InvalidInputException(msg: String) : RuntimeException(msg)
class UserNotFoundException(id: Int) : RuntimeException("user $id not found")
fun main() {
    try { throw UserNotFoundException(7) }
    catch (e: UserNotFoundException) { println(e.message) }
}

Özel Durumları Belgeleme

Bir işlevin hangi özel durumları oluşturabileceğini belgelemek için KDoc @throws kullanın.

/**
 * @throws InvalidEmailException if the email is malformed
 */
fun validate(email: String) {
    if ("@" !in email) throw InvalidEmailException("missing @")
}
class InvalidEmailException(m: String) : RuntimeException(m)
fun main() {
    try { validate("nope") }
    catch (e: InvalidEmailException) { println(e.message) }
}

Özel Durumları Gereğinden Fazla Kullanmaktan Kaçının

Özel durumlar olağan dışı durumlar içindir. Beklenen sonuçlar (boş girdi, eksik isteğe bağlı alan) için null döndüren değerleri, mühürlü sonuç türlerini veya varsayılan değerleri tercih edin.

fun findUser(id: Int): String? = if (id == 1) "Alice" else null
fun main() {
    val name = findUser(42) ?: "(unknown)"
    println(name) // (unknown), no exception
}

Uygulamalı Örnek

Durum ve gövde içeren, kurgusal bir API istemcisi için gerçekçi bir özel durum.

class ApiException(
    message: String,
    val statusCode: Int,
    val responseBody: String
) : RuntimeException(message)
fun main() {
    try {
        throw ApiException("Bad Request", 400, "{\"error\":\"invalid\"}")
    } catch (e: ApiException) {
        println("[${e.statusCode}] ${e.message}: ${e.responseBody}")
    }
}

Hızlı Kontrol

Alana özgü bir Kotlin özel durumu tanımlarken en yaygın kullanılan üst sınıf hangisidir?

Özet

Özel durumlar alan anlamını kodlar. RuntimeException veya Exception sınıfından türetin; bağlam için özellikler ekleyin; nedenleri koruyun; gruplandırılmış yakalamalar için hiyerarşiler oluşturun. Sınırlı kümeler için mühürlü özel durumları, hataların beklendiği durumlarda ise null döndüren veya sonuç türlerini tercih edin.

Sıkça Sorulan Sorular

“Özel İstisna Sınıfları Oluşturma” dersi ücretsiz mi?

Evet — “Özel İstisna Sınıfları Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Özel İstisna Sınıfları Oluşturma” dersinde ne öğreneceğim?

Anlamlı iletiler ve özelliklerle alana özgü istisnalar tanımlayın. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Özel İstisna Sınıfları Oluşturma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İfade Olarak try/catch/finally
  2. Özel İstisna Sınıfları Oluşturma
  3. runCatching ve Result
  4. İstisnaları Yeniden Fırlatma ve Zincirleme
← Kotlin Academy Sayfasına Dön