orElse<F> method

Result<T, F> orElse<F>(
  1. Result<T, F> op(
    1. E err
    )
)

Calls op if the result is error, otherwise returns the ok value of class`.

This function can be used for control flow based on result values.

Example

Basic Usage:

import 'package:dartsult/dartsult.dart';

main() {
  Result<int, int> sq(int x) {
    return Result.ok(x * x);
  }

  Result<int, int> err(int x) {
    return Result.error(x);
  }

  assert(Result.ok<int, int>(2).orElse(sq).orElse(sq) == Result.ok<int, int>(2));
  assert(Result.ok<int, int>(2).orElse(err).orElse(sq) == Result.ok<int, int>(2));
  assert(Result.error<int, int>(3).orElse(sq).orElse(err) == Result.ok<int, int>(9));
  assert(Result.error<int, int>(3).orElse(err).orElse(err) == Result.error<int, int>(3));
}

Implementation

Result<T, F> orElse<F>(Result<T, F> Function(E err) op) {
  if (_ok.val != null) {
    return Result.ok(_ok.val!);
  }
  return op(_error.val!);
}