Kotlin
NULL
null安全

「null安全」という訳語の背景

More than 1 year has passed since last update.

「null安全」という訳語が色々と議論を呼んでいるようです。本質的でない話に多くの開発者のリソースが割かれるのは本意ではないので、僕が「null安全」という訳語を使った背景を説明します。

もし コンパイル時(または静的解析時)にチェックすることで null による実行時エラーを起こさない という概念を表す用語として、「null安全」より適切なものがあれば教えていただけるとうれしいです(新しく用語の提案ではなく、すでに用いられている用語で)。

null safety を「null安全」と訳した理由

元投稿にも書きましたが、「null安全」は null safety の訳で、 Kotlin で使われています。これが Kotlin のオリジナルかはわからないですが、僕の知る限りでは Kotlin 以外では null safety という用語は使われていないように思います。

当初は「null安全」ではなく「nullセーフ」と書こうと考えていました。単純に、僕の周りでは「nullセーフ」と呼ばれていたからです。しかし、調べてみても Kotlin のページで null-safe という用語は使われていないですし、 null-safe でググってもヒットするのは null-safe operator とかばかりで、 コンパイル時(または静的解析時)にチェックすることで null による実行時エラーを起こさない という性質を表す形容詞として null-safe と呼ばれているケースは多くなさそうでした。そのため、「nullセーフ」という訳語を使うべきか再検討することにしました。

しかし、 null safety を「nullセーフティ」や「null安全性」と訳してしまうと「nullセーフティな言語」や「null安全性な言語」とは言えないので使い勝手が悪いです。ググってみると「null安全」という訳が見つかりました。 「null安全」であればあくまで null safety の訳としたままで、日本語における形容詞的な派生として「null安全な言語」という使い方をしても自然です。 それが、僕が null safety でも「nullセーフティ」でも「null安全性」でも「nullセーフ」でもなく、「null安全」という訳語を使った理由です。

それが気に入らなければ null-safe や「nullセーフ」など、好きに呼べばいんんじゃないかと思います。僕自身も無理な日本語訳は好きじゃないです。 共変反変 より covariant, contravariant の方が好きです。 null-safe が一般的な用語なら null-safe と呼びたいところです。

null safety という用語の是非

null safety を「null安全」と訳すのが適切かというのとは別に、 コンパイル時(または静的解析時)にチェックすることで null による実行時エラーを起こさない という概念を null safety と呼ぶのが適切かということも議論になっているようです。

次の理由から、僕の知る限り null safety はこの概念を表すのに最も適した用語です。

他に適した用語が見つからない

option type, maybe type, optional type などの用語はありますが、これらは null に相当する値を保持できる型を表す語であり、その結果として null safety が実現できるだけです。 null safety の概念自体を表すわけではなりません。

僕の探した限り、 null safety 以外にその概念を表す適当な用語が見つかりませんでした。他により良い用語があれば僕も知りたいので教えてほしいです。

単語の選び方が自然である

「ぬるぽだって問題があったら停止するので安全じゃないか。安全=safetyの意味がわかりづらい。」という意見もあるようです。しかし、 C 言語等の NULL のデリファレンスが未定義な言語と比べれば「安全」かもしれませんが、静的な型検査で見つけられるエラーを実行時にまで持ち越して、潜在バグを生み出しかねないものを「安全」と呼ぶのは無理があるように思います。

僕は、 null safety という用語は type safety からのアナロジーで考えると自然だと思います。