Pakete, Repositories und App-Kategorien suchen

Paketdetailsv2.0.0

either_option

Die einfache Bibliothek für Fehlerbehandlung mit funktionalem Programmierkonzept

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
570
Likes
42
Pub-Punkte
150

Paket installieren

flutter pub add either_option

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

Eine leichte Dart-Bibliothek, die von der funktionalen Programmierung inspiriert ist und den `Either`-Typ für eine robuste Fehlerbehandlung bietet. Sie ermöglicht sichere Berechnungen, indem Ergebnisse entweder als erfolgreicher Wert (`Right`) oder als Fehler (`Left`) dargestellt werden. Dieser Ansatz hilft, Ausnahmen zu vermeiden und fördert eine explizite Fehlerverwaltung im Code. Die Bibliothek ist ideal für Entwickler, die in asynchronen und funktionalen Workflows saubere und vorhersehbare Steuerflüsse suchen. Sie integriert sich nahtlos in das Dart-Ökosystem und unterstützt alle wichtigen Plattformen.

Anwendungsfälle

  • Fehlerbehandlung bei asynchronen Operationen
  • Funktionsorientierte Datenverarbeitung
  • Sichere Analyse und Überprüfung
  • Ersetzen von try-catch-Blöcken
  • Fehleranfällige Funktionen erstellen
  • Resiliente Geschäftslogik aufbauen

Hauptmerkmale

  • Bietet den Typ `Either<Left, Right>` an
  • Unterstützt funktionale Komposition
  • Unveränderlich und typsicher
  • Minimales Boilerplate
  • Funktioniert mit async/await
  • Plattformübergreifende Kompatibilität

Geeignet für

  • Entwickler, die funktionale Programmiermuster verwenden
  • Teams, die Fehler-Sicherheit priorisieren
  • Projekte, die eine saubere Fehlerpropagation erfordern
  • Dart-Entwickler vermeiden Ausnahmen
  • Diejenigen, die wiederverwendbare, zusammensetzbare Logik erstellen
  • Anwendungen, die vorhersagbare Zustandsübergänge erfordern

Hinweise

  • Erfordert Verständnis funktionaler Konzepte
  • Kann die Lernkurve für Anfänger erhöhen
  • Nicht geeignet für einfache Fehlerfälle
  • Beschränkt auf die Verwendung mit expliziten Fehlerarten
  • Am besten mit anderen FP-Tools kombiniert
  • Bei komplexen Ketten ist eine sorgfältige Typausrichtung erforderlich

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

either_option

either_option is a simple library typed for easy and safe error handling with functional programming style in Dart. It aims to allow flutter/dart developpers to use the 2 most popular patterns and abstractions : Either and Option, mainly used in FP language like Scala, Haskell, OCaml,...

Installation

Prerelease versions that support null safety

Package link on pub either_option In your pubspec.yaml dependencies add

   either_option: ^2.0.0

Overview

Either

Either Represents a value of one of two possible types. By convention we put missing or error value in an instance of Left and expected success value in an instance of Right.

For example, we fetch an url from a repository repository to get an User details and use Either<ServerError,User> :

  Future<Either<ServerError, User>> getUser(int id) async {
    final baseUrl = "https://fakerestapi.azurewebsites.net/api/Users/$id";

    final res = await http.get(baseUrl);

    if (res.statusCode == 200) {
      dynamic body = json.decode(res.body);
      User user = User.fromJson(body);
      return Right(user);
    }
    if (res.statusCode == 404)
      return Left(ServerError("This user doesn't exist"));

    return Left(ServerError("Unknown server error"));
  }

So now to consume result we can use for example fold method and say what to do with value :

main() async {
  final Repository repository = Repository();

  final Either<ServerError, User> res = await repository.getUser(3);
  final defaultUser = User(id: 0, username: "ko", password: "ko");
  final userName = res.fold((_) => defaultUser.username, (user) => user.username);
  print(userName); // "User 3"
  
//if res was a Left, print(userName) would give "ko"
}

Option

Option Represents a value of one of two possible types. By convention we consider missing value as an instance of None and expected success value in an instance of Some.

  Future<Option<User>> getUserOpt(int id) async {
    final res = await http.get(baseUrl);
    return Option.cond(
        res.statusCode == 200, User.fromJson(json.decode(res.body)));
  }
  // -----------------------------------------
  main() async {
  final Repository repository = Repository();

  final Option<User> res = await repository.getUserOpt(3);
  final defaultUser = User(id: 0, username: "ko", password: "ko");
  final userName = res.getOrElse(defaultUser).username;
  print(userName); // "User 3"

  //if res was a None, print(userName) would give "ko"
}

Ressources & explanation

Medium article

Features

Functions available :

Option Either
fold :+1: :+1:
map :+1: :+1:
flatMap :+1: :+1:
getOrElse :+1:
orElse :+1:
toLeft :+1:
toRight :+1:
toEither :+1:
Option.empty :+1:
Option.of :+1:
filter :+1:
exists :+1:
contains :+1:
swap :+1:
cond :+1: :+1:

Example

Tests

Kategorien

Abhängigkeiten

Abhängigkeiten 1 Einträge

Quell-Repository

Projekte, die dieses Paket verwenden

Noch keine Daten verfügbar.