0Pricing
TypeScript Academy · レッスン

Option型とMaybe型

値の存在または不在を明示的にモデル化します。

「Option型とMaybe型」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

不在をモデル化する

値が単に存在しないだけで、報告すべきエラーがない場合もあります。Option(Maybeとも呼ばれます)は、存在または不在を明示的にモデル化します。これはnullやundefinedに代わる方法です。

Option の定義

Optionはsomeタグを持つ判別共用体です。someがtrueの場合は値が存在し、falseの場合は何も存在しません。

type Option<T> =
  | { some: true; value: T }
  | { some: false };

コンストラクター

someとnoneのヘルパーを使うと、Optionの値を簡単に作成できます。これはResultのok/errに対応するものです。

const some = <T>(value: T): Option<T> => ({ some: true, value });
const none: Option<never> = { some: false };

Option を返す

何も見つからない可能性がある検索では、T | undefinedの代わりにOptionを返します。値が任意であるという意図が、型に明示されます。

function find<T>(arr: T[], pred: (x: T) => boolean): Option<T> {
  const hit = arr.find(pred);
  return hit === undefined ? none : some(hit);
}

some で型を絞り込む

opt.someを確認すると、値に安全にアクセスできます。コンパイラーは、値が存在する分岐内でのみvalueの読み取りを許可します。

const r = find([1, 2, 3], n => n > 1);
if (r.some) console.log(r.value); // 2
else console.log("not found");

単に null ではいけない理由

nullとundefinedは忘れやすく、他の型に紛れ込んでしまいます。明示的なOptionを使うと、不在のケースの処理が強制され、意図したものだと明確に読み取れます。

Option と T | undefined の比較

どちらも不在をモデル化できますが、Optionは名前の付いた明確な構造なので、ヘルパー(map、getOrElse)を追加できます。これにより、コードベース全体で一貫した処理が促されます。

// undefined is implicit and easy to ignore;
// Option is explicit and self-documenting.

getOrElse ヘルパー

Optionを具体的な値に変換するには、不在の場合の代替値を指定します。これにより、不在の処理を1か所に分かりやすくまとめられます。

function getOrElse<T>(o: Option<T>, fallback: T): T {
  return o.some ? o.value : fallback;
}
console.log(getOrElse(none, 0)); // 0

Option に対する map

mapは、値が存在する場合にのみ内部の値を変換し、不在はそのままにします。これにより、繰り返し確認せずに変換を連鎖させることができます。

function mapOpt<T, U>(o: Option<T>, f: (t: T) => U): Option<U> {
  return o.some ? some(f(o.value)) : none;
}
console.log(mapOpt(some(5), n => n * 2)); // { some: true, value: 10 }

Option と Result の比較

不在に理由がない場合(検索で見つからなかった場合など)はOptionを使います。失敗に説明すべきエラーがある場合はResultを使います。なぜ失敗したのかを伝える必要があるかどうかで選びます。

Option の合成

OptionにはmapとgetOrElseがあるため、任意の処理を連鎖させても読みやすさを保てます。不在になると、連鎖全体が自動的にそこで短絡します。

const out = getOrElse(mapOpt(find([1,2], n => n > 1), n => n + 100), -1);
console.log(out); // 102

理解度チェック

このレッスンの理解度を確認します。

まとめ

Option<T>は、{ some: true; value }または{ some: false }であり、nullの代わりに不在を明示的にモデル化します。some/noneで構築し、someで型を絞り込み、getOrElseやmapなどのヘルパーを使います。理由のない不在にはOptionを、理由のある失敗にはResultを使います。

よくある質問

「Option型とMaybe型」レッスンは無料ですか?

はい。「Option型とMaybe型」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「Option型とMaybe型」で何を学びますか?

値の存在または不在を明示的にモデル化します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Option型とMaybe型」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. エラーをthrowすることの問題
  2. Result型のモデル化
  3. Option型とMaybe型
  4. Railway-Oriented Programming
← TypeScript Academyに戻る