null-handling-01jpcvxfxbfm6z9tc89zm9c37e.md•2.86 kB
---
description: null handlingに関するドキュメント
ruleId: null-handling-01jpcvxfxbfm6z9tc89zm9c37e
tags: ["development"]
aliases: ["null-handling", "option-pattern"]
globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.go", "**/*.rs", "**/*.scala"]
---
# NULLハンドリングのルール
## 基本原則
NULL参照によるエラーはバグの主要な原因の1つです。明示的なNULLハンドリングポリシーを導入することで、より安全で予測可能なコードを作成できます。
## NULL値の代替としてのOption型
値の存在が不確かな場合、NULLの代わりにOption型を使用します。
| 言語 | 推奨型 |。
|------|--------|。
| Java | `vavr`の`Option<T>`型 |。
| Scala | 標準ライブラリの`Option[T]`型 |。
| Rust | 標準ライブラリの`Option<T>`型 |。
| Go | `samber/mo`の`Option[T]`型 |。
| TypeScript | `fp-ts`の`Option<T>`型 |。
## 2. 主要なユースケース
Option型は以下のような場面で特に有用です:。
1. **検索操作の結果**。
- データベースからのレコード検索。
- コレクション内の要素検索。
- キャッシュからの値取得。
1. **オプショナルな値**。
- オプショナルなパラメータ。
- 設定値が未設定の場合。
- 省略可能なフィールド。
1. **計算結果**。
- 条件付きの計算。
- 失敗する可能性のある変換。
## Option型の基本操作
Option型では一般的に以下の操作が提供されます:。
1. **マッピング** - 値が存在する場合のみ変換を適用。
2. **フィルタリング** - 条件を満たす場合のみ値を保持。
3. **デフォルト値の提供** - 値が存在しない場合に代替値を使用。
4. **副作用の実行** - 値の有無に応じた処理。
## NULLハンドリングの設計指針
効果的なNULLハンドリングのためのガイドライン:。
1. **明示的な不在を表現**。
- NULLや未定義ではなく、Option型を使用。
- 戻り値の型シグネチャで不在の可能性を明示。
1. **早期検証**。
- メソッドの先頭でNULL値を検証。
- 境界での検証を優先し、内部ではNULL非存在を前提に。
1. **モナディックな操作の活用**。
- 連鎖的な操作にはモナド演算子を使用。
- 条件分岐よりも宣言的な表現を優先。
1. **デフォルト値の適切な使用**。
- ビジネスルールに基づいたデフォルト値の選択。
- デフォルト値が適切でない場合は早期リターン。
NULLハンドリングを適切に行うことで、「NullPointerException」や同様のランタイムエラーを防止し、コードの品質と信頼性を向上させることができます。