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_existing
やis_existed
とはできないみたいです。分詞だと言い張ればイケなくもないかもしれませんが、不自然なんでしょう。
※ 念をおしておきますが、is_exists がダメとかそういう話しではないです。なぜJavaのAPIがあのようにネーミングしているのかが知りたかっただけです。