为什么我们应该在颤振中使用选项?

时间:2021-03-16 07:16:18

标签: flutter dart flutter-dependencies flutter-test dart-pub

任何人都可以解释一下 dart 和 flutter 中“选项”的用例是什么。

  Eg:  Future<Option<User>> getSignedInUser();

1 个答案:

答案 0 :(得分:2)

您可以看到 dartz 包提供的 OptionEither 被大量用于遵循函数式编程范式的应用程序。它们被称为单子

举个例子,在进行 API 调用时,它可以返回预期值,也可以返回错误。通常我们会在发生错误或抛出异常时返回 null,但这可能会导致运行时错误,并且对于处理不同的错误类型(为最终用户显示确切的错误消息)没有用处。

Monad 允许我们通过一个泛型类封装这两种结果。

回到 Option,它代表两种可能类型之一的值。约定是将缺失值视为 None 的实例,将预期成功值视为 Some 的实例。所以它用一个类来表示没有返回值,而不仅仅是 null

此外,您可以使用 fold() 方法来处理这两种情况:

void main() {
  final car = Car(Colors.black, 'Mercedes');

  final option = getNameAsOptional(car); // Get name of the car, returning an Option 

  // Use the fold() method to handle both case: name is None and name is Some
  option.fold(
    () => print('None!'), // 1st case: Failure
    (name) => print('Aha! Your car's name is $name'), // 2nd case: Success
  );
}

P/S:您可以在 this article 中阅读有关 monads 的更多信息。它来自不同包的作者,但基本概念保持不变。