Result pattern
- Dart kursu
- Orta seviye
- Ders 103/116
- 5 dk
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
// 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
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ş
switch (result) { case Success(:final value): print(____); }
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 |