CodeBlanks Logo Icon CodeBlanks

Result pattern

Result pattern ile fonksiyonel hata yönetimi öğrenirsin.

Result pattern

Hataları istisna fırlatmak yerine bir değer olarak döndürmek, fonksiyonel bir yaklaşımdır. Buna Result pattern denir.

Dart'ta genellikle bir sealed class Result<T> tanımlanır: Success<T>(T value) ve Failure<T>(String error). Çağıran, dönen değeri pattern matching ile ayırır.

Bu, hataları tip güvenli biçimde ele alır; unutulan hata durumu derleme hatası verir.

Result pattern örneği

Tipik bir divide fonksiyonu: Result<int> divide(int a, int b). b sıfırsa Failure('sıfıra bölme'), değilse Success(a ~/ b) döndürür.

Çağıran taraf: switch (result) { case Success(:final value): print(value); case Failure(:final error): print(error); }.

sealed sayesinde derleyici her durumu denetler; yeni bir alt sınıf eklersen tüm switch'ler uyarılır.

Uygulama Result ile bölme

sealed class Result<T> {} tanımla. class Success<T> extends Result<T> (final T value + yapıcı) ve class Failure<T> extends Result<T> (final String error + yapıcı) ekle. Result<int> divide(int a, int b) fonksiyonu yaz: b 0'sa Failure('sıfıra bölme'), değilse Success(a ~/ b) döndür. main içinde divide(10, 0) çağır ve switch ile ayır: Success'te value'yu, Failure'da error'u yazdır.

Başlangıç kodu

main.dart
// Result, Success, Failure sınıflarını tanımla

// divide fonksiyonunu yaz

void main() {
  // divide(10, 0) çağır, switch ile ayır
}

Örnek çözüm

main.dart
sealed class Result<T> {}

class Success<T> extends Result<T> {
  final T value;
  Success(this.value);
}

class Failure<T> extends Result<T> {
  final String error;
  Failure(this.error);
}

Result<int> divide(int a, int b) {
  if (b == 0) return Failure('sıfıra bölme');
  return Success(a ~/ b);
}

void main() {
  final r = divide(10, 0);
  switch (r) {
    case Success(:final value):
      print(value);
    case Failure(:final error):
      print(error);
  }
}

Beklenen çıktı

sıfıra bölme

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Result pattern'ın avantajı nedir?

  • Hataları yoksayar
  • Hataları tip güvenli yapar Doğru cevap
  • Daha hızlı çalışır
  • Exception'ı kaldırır

Açıklama: Result pattern her hata durumunu türle temsil eder.

2 Success değerine eriş

Soru
switch (result) { case Success(:final value): print(____); }
Cevap
switch (result) { case Success(:final value): print(value); }

Açıklama: Success deseninde value bağlanır.

3 Result pattern parçaları

Kavram Anlamı
Success<T> Başarı durumu
Failure<T> Hata durumu
sealed class Kapalı hiyerarşi
switch Pattern matching

Orta seviye bölümündeki tüm dersler