Dart
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.
Örnek çözümü göster
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);
}
}
Kendini test et
-
Result pattern'ın avantajı nedir?
- Hataları yoksayar
- Hataları tip güvenli yapar
- Daha hızlı çalışır
- Exception'ı kaldırır
Cevabı göster
Hataları tip güvenli yapar — Result pattern her hata durumunu türle temsil eder.
-
Success değerine eriş
switch (result) { case Success(:final value): print(____); }
Cevabı göster
switch (result) { case Success(:final value): print(value); }
-
Result pattern parçaları
- Success<T>
- Başarı durumu
- Failure<T>
- Hata durumu
- sealed class
- Kapalı hiyerarşi
- switch
- Pattern matching
Sıradaki ders: Async error