Result インターフェース
Result<T, E> は成功または失敗を表現する型です。Rust の Result<T, E> に着想を得ています。
定義
namespace WizDevelop\PhpMonad;
/**
* @template T
* @template E
* @extends Monad<T>
*/
#[Sealed(permits: [Ok::class, Err::class])]
interface Result extends Monad実装クラス
| クラス | 説明 |
|---|---|
Ok<T> | 成功値 T を保持する |
Err<E> | エラー値 E を保持する |
状態判定メソッド
isOk
成功かどうかを判定します。
public function isOk(): bool;PHPStan のアサーションにより、isOk() が true を返した後は Ok<T> として型推論されます。
isErr
失敗かどうかを判定します。
public function isErr(): bool;isOkAnd
成功かつ述語を満たすかどうかを判定します。
/**
* @param Closure(T): bool $predicate
*/
public function isOkAnd(Closure $predicate): bool;isErrAnd
失敗かつ述語を満たすかどうかを判定します。
/**
* @param Closure(E): bool $predicate
*/
public function isErrAnd(Closure $predicate): bool;値取得メソッド
expect
カスタムメッセージ付きで成功値を取得します。Err の場合は RuntimeException をスローします。
/**
* @return T
* @throws RuntimeException
*/
public function expect(string $message): mixed;unwrap
成功値を取得します。Err の場合は例外をスローします。
/**
* @return T
* @throws Throwable
*/
public function unwrap(): mixed;unwrapErr
エラー値を取得します。Ok の場合は RuntimeException をスローします。
/**
* @return E
* @throws RuntimeException
*/
public function unwrapErr(): mixed;unwrapOr
成功値を取得するか、デフォルト値を返します。
/**
* @template U
* @param U $default
* @return T|U
*/
public function unwrapOr(mixed $default): mixed;unwrapOrElse
成功値を取得するか、エラー値から計算したデフォルト値を返します。
/**
* @template U
* @param Closure(E): U $default
* @return T|U
*/
public function unwrapOrElse(Closure $default): mixed;unwrapOrThrow
成功値を取得するか、指定した例外をスローします。
/**
* @template F of Throwable
* @param F $exception
* @return T
* @throws F
*/
public function unwrapOrThrow(Throwable $exception): mixed;変換メソッド
map
成功値を変換します。Err の場合はスキップされます。
/**
* @template U
* @param Closure(T): U $callback
* @return Result<U, E>
*/
public function map(Closure $callback): self;mapErr
エラー値を変換します。Ok の場合はスキップされます。
/**
* @template F
* @param Closure(E): F $callback
* @return Result<T, F>
*/
public function mapErr(Closure $callback): self;mapOr
成功値を変換するか、デフォルト値を返します。
/**
* @template U
* @param Closure(T): U $callback
* @param U $default
* @return U
*/
public function mapOr(Closure $callback, mixed $default): mixed;mapOrElse
成功値を変換するか、エラー値からデフォルト値を計算します。
/**
* @template U
* @param Closure(T): U $callback
* @param Closure(E): U $default
* @return U
*/
public function mapOrElse(Closure $callback, Closure $default): mixed;inspect
成功値を検査(副作用を実行)し、自身を返します。
/**
* @param Closure(T): mixed $callback
* @return $this
*/
public function inspect(Closure $callback): self;inspectErr
エラー値を検査(副作用を実行)し、自身を返します。
/**
* @param Closure(E): mixed $callback
* @return $this
*/
public function inspectErr(Closure $callback): self;論理演算メソッド
and
両方が Ok の場合、右側を返します。
/**
* @template U
* @param Result<U, E> $right
* @return Result<U, E>
*/
public function and(self $right): self;andThen
成功値を受け取り Result を返す関数を適用します。
/**
* @template U
* @template F
* @param Closure(T): Result<U, F> $right
* @return Result<U, E|F>
*/
public function andThen(Closure $right): self;or
左が Err なら右を返します。
/**
* @template F
* @param Result<T, F> $right
* @return Result<T, F>
*/
public function or(self $right): self;orElse
左が Err なら関数を実行して右を取得します。
/**
* @template F
* @param Closure(E): Result<T, F> $right
* @return Result<T, F>
*/
public function orElse(Closure $right): self;orThrow
Err の場合に例外をスローし、Ok の場合はそのまま返します。
/**
* @template F of Throwable
* @param F $exception
* @return $this
* @throws F
*/
public function orThrow(Throwable $exception): self;Option 変換メソッド
ok
Ok を Some に、Err を None に変換します。
/**
* @return Option<T>
*/
public function ok(): Option;err
Err を Some に、Ok を None に変換します。
/**
* @return Option<E>
*/
public function err(): Option;廃止予定メソッド
match
廃止予定
このメソッドは非推奨です。代わりに mapOrElse を使用してください。
/**
* @deprecated
* @template U
* @template V
* @param Closure(T): U $okFn
* @param Closure(E): V $errFn
* @return U|V
*/
#[Deprecated]
public function match(Closure $okFn, Closure $errFn): mixed;