ゲッター呼び出しの連鎖における Null チェックのエレガントな処理
ソフトウェア開発では、ゲッターを連鎖させる必要がある状況に遭遇することがよくあります。
<code class="java">house.getFloor(0).getWall(WEST).getDoor().getDoorknob();</code>
などの呼び出し。ただし、チェーンに沿ったオブジェクトのいずれかが null の場合、そのようなチェーンは NullPointerExceptions の影響を受ける可能性があります。これを防ぐために、開発者は多くの場合、長時間の null チェックに頼って、不必要な複雑さとコードの重複を追加します。
代替アプローチ
この問題を処理する Java の the-box ユーティリティ クラスには、エレガントな代替手段があります:
デメテル違反の法則
@Erwin Bolwidt が提案したように、デメテルの法則 (LoD) を使用し、ネストされたプロパティに直接アクセスします。
<code class="java">if (house != null && house.floors != null && house.floors[0] != null && house.floors[0].walls != null && house.floors[0].walls[WEST] != null) ...</code>
このアプローチはカプセル化の原則に違反し、コードが複雑になるため推奨されません。
Java 8 ではオプションです。
Java 8 では、null をよりエレガントに処理できるようにする Optional 型が導入されました。各ゲッター呼び出しをオプションでラップできます。
<code class="java">Optional.ofNullable(house) .map(house -> house.getFloor(0)) .map(floor -> floor.getWall(WEST)) .map(wall -> wall.getDoor()) .map(door -> door.getDoorknob());</code>
このアプローチでは、明示的な null チェックの必要性がなくなり、より簡潔で表現力豊かな構文が提供されます。
結論
ゲッター チェーンの null をチェックするための組み込みユーティリティはありませんが、Optional 型とデメテルの法則違反により、柔軟でコンテキスト依存のソリューションが提供されます。最適なアプローチの選択は、特定のシナリオとプロジェクトの設計原則によって異なります。
以上がゲッター チェーンでの Null チェックを適切に処理する方法: オプションとデメテルの法則?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。