Middle
Seal sınıfları nedir ve amacları nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kapalı sınıflar sınırlı sınıf hiyerarşilerini temsil eder. Sınırlı bir durum veya değer kümesini temsil etmek için kullanılırlar.
Ana özellikler ve amaçlar:
- Sınırlı hiyerarşi: Kapalı sınıfın alt sınıfları, Kotlin 1.5 öncesinde aynı dosyada veya kapalı sınıfın içinde tanımlanmalıdır. 1.5 sürümünden itibaren bu kısıtlama gevşetildi: alt sınıflar aynı pakette herhangi bir dosyada olabilir.
- Durumlu enum sınıflar: Enum sınıflarının aksine, kapalı sınıfın her alt sınıfı kendi durumu ve davranışına sahip olabilir.
- Tam
when: Derleyici, bir kapalı sınıf örneği içinwhenbloğunun tam olduğunu garanti eder (tüm durumlar kapsanmıştır),elsedalı belirtilmediyse. Bu, çalışma zamanında hataları azaltır.
Örnek:
sealed class Result<out T> {
data class Success<out T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
object Loading : Result<Nothing>() // Tekil örnek
}
fun processResult(result: Result<String>) {
when (result) {
is Result.Success -> {
// Başarılı sonucu işle
println("Data: ${result.data}")
}
is Result.Error -> {
// Hata işle
println("Error: ${result.exception.message}")
}
Result.Loading -> {
// Yükleme durumunu işle
println("Loading data...")
}
// `else` dalı gerekmez, çünkü tüm alt sınıflar
// Result tarafından kapsanmıştır
}
}
Amaç:
- Güvenli durum temsili: Ağ isteği sonucu gibi, olası durumların sınırlı sayısını güvenle temsil etmek (
Success,Error,Loading). - Kod okunabilirliğinin artırılması: Farklı durumların işlenmesinde kodu daha açık hale getirmek.
whenifadelerinin güvenilirliğinin artırılması: Derleyici, işlenmeyen durumları önlemeye yardımcı olur.- Durumlu enum sınıflarının yerine geçer: Belirli "varyantlar" ile verileri ilişkilendirmek gerektiğinde.
Bu şekilde, kapalı sınıflar, her değere özgü verilerin saklanma imkanıyla birlikte, sonlu değer kümelerinin modellenmesi için esnek bir yol sağlar ve bu değerlerin when ifadelerinde güvenli ve açık bir şekilde işlenmesini garanti eder.