Javaはなぜ
containsとネーミングしたのか

ずーと疑問に思っていた事なのですが、JavaのAPIの中でboolを返すメソッドの中で特殊なネーミングにexistsと containsというのがあります。

 

Boolを返すメソッドは、動詞の3人称を使うというルールなので間違ってはないのですが、じゃぁなぜ、この2つ以外の動詞が3人称で登場しないか(少なくともJavaのAPIの中で)というのが疑問でした。containは他動詞だし …

 

bool shows()  // 表示するか

 

こんな感じのネーミングが見当たらない事を論理的に説明するには… というのをずーと考えていたのですが、 今日やっと答えが見つかりました。

状態動詞

exist のように状態を表わす動詞を状態動詞と言うそうです。contain は他動詞ですが状態動詞です。状態動詞には他にも以下のようなものがあります。

 

be (is) - である
have (has) - 持っている
exist (exists) - 存在する
contain (contains) - 含む
equal (equals)
belong to (belongs to) - 所属する
know (knows) - 知る(知っている)

 

そして、なんと isも状態動詞だったみたいです。つまり、 Bool を返すメソッドは、「is で始める」ルールではなく状態動詞の3人称で始めるルールと考えると解決します。このルールを適用すると「所属しているか?」はこんな感じになります。

 

employee.belongs_to(dept)  // 所属しているか

スッキリです。
ちなにみですが、状態動詞は進行形や受動態にできないらしいです。なので、is_existingis_existedとはできないみたいです。分詞だと言い張ればイケなくもないかもしれませんが、不自然なんでしょう。

 

※ 念をおしておきますが、is_exists がダメとかそういう話しではないです。なぜJavaのAPIがあのようにネーミングしているのかが知りたかっただけです。


Kenji in codic

codic のリードプログラマー / デザイナーです。時間があれば、英語やネーミング、NLPについて研究したりしています。