Skip to Content
Javaへの関数的アプローチ
book

Javaへの関数的アプローチ

by Ben Weidig
March 2025
Intermediate to advanced
414 pages
5h 47m
Japanese
O'Reilly Media, Inc.
Book available
Content preview from Javaへの関数的アプローチ

第9章. NULLをオプションで処理する

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

NullPointerExceptions多くの人は、 参照をnull 10億ドルの間違いと呼んでいる。 実は、 の発明者自身が、もともとこのフレーズを作ったのだ: null

私はそれを10億ドルの過ちと呼んでいる。

それは、1965年のnull 参照の発明である。当時、私はオブジェクト指向言語(ALGOL W)において、参照のための最初の包括的な型システムを設計していた。私の目標は、コンパイラが自動的にチェックを行うことで、参照のすべての使用が絶対的に安全であることを保証することだった。しかし、null 参照は実装が非常に簡単だったため、私はその誘惑に勝てなかった。

これが無数のエラー、脆弱性、システムクラッシュを引き起こし、過去40年間でおそらく10億ドルの痛手と損害を与えた。

チャールズ・アントニー・リチャード・ホア卿(2009年QCon London)

この「間違い」をどう扱うかについて絶対的なコンセンサスはないが、多くのプログラミング言語には、null 参照を適切かつ慣用的に扱う方法があり、多くの場合、言語自体に直接組み込まれている。

この章では、Javaがnull 参照をどのように扱うか、また、Optional<T> 型とその関数APIを使ってコード内でそれをどのように改善するかを紹介し、Optionalsを使う方法、タイミング、使わないタイミングを学ぶ。

null参照の問題点

false 値がない場合のJavaの扱いは、型によって異なる。 すべてのプリミティブ型にはデフォルト値があり、例えば、数値型にはゼロと等価な値が、boolean 。クラス、インタフェース、配列などの非プリミティブ型では、未割り当ての場合、デフォルト値としてnull 、これは変数がオブジェクトを参照していないことを意味する。

参照型の概念は、C/C++のポインタと似ているように思えるかもしれないが、Javaの参照型は、reference と呼ばれるJVM内部の特殊化された型である。 JVMは、型の安全性を確保し、メモリ・アクセスを保護するために、参照型を厳密に制御する。

null 参照は単なる「何もない」状態ではなく、特別な状態である。なぜならnull は、実際の型に関係なく、どんなオブジェクト参照にも使える一般化型だからである。null 参照にアクセスしようとすると、JVMはNullPointerException をスローし、適切に処理しないと現在のスレッドがクラッシュしてしまう。 これは通常、例9-1に見られるように、実行時にいたるところで null チェックを要求する、防御的プログラミングアプローチによって緩和される。

例9-1. ヌルの地雷原
record User(long id, String firstname, String lastname) {

  String fullname() {
    return String.format("%s %s", 1
                         firstname(),
                         lastname());
  }

  String initials()
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

ディフェンシブ・セキュリティ・ハンドブック第2版

ディフェンシブ・セキュリティ・ハンドブック第2版

Lee Brotherston, Amanda Berlin, William F. Reyor
エンジニアが学ぶ会計システムの「知識」と「技術」

エンジニアが学ぶ会計システムの「知識」と「技術」

広川 敬祐, 五島 伸二, 小田 恭彦, 大塚 晃, 川勝 健司

Publisher Resources

ISBN: 9798341625730Supplemental Content