大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

ブロークンな命名も悪くないかも

著者:高木信尚
公開日:2019/07/27
最終更新日:2019/07/27
カテゴリー:技術情報

高木です。こんにちは。

先日、現在開発中のソフトウェアのソースコードを社員と2人で読んでいて気付いたことがあります。
ある識別子に「Readed」という語が含まれていたのです。
2人ともおかしいことには気付いたのですが、「まあいいか」とスルーしました。

今回はこのように、英語としては間違っているけれど、許容可能なものもあれば、むしろそのほうが望ましいものもあるのではないかという話です。

英語には不規則変化というものがあります。
中学校のころから英語が苦手な人のなかには、この不規則変化にやられたという人も少なくないと思います。
英語に限らず印欧諸語は、もともとは強変化(不規則変化)のほうが圧倒的に多かったので、英語はそれらが整理されて規則変化が多くなったほうです。

それはそうと、プログラマーの中にも英語が苦手だという人が結構な割合でいます。
その良し悪しはともかく、現実に英語が苦手なプログラマーが多いという事実のほうが重要です。
そういう人たちにもソースコードを読みやすいように工夫するには、本来は不規則変化する単語であっても強引に規則変化させてしまうのも悪くないと感じてます。

たとえば、readは過去形も過去分詞形もreadですが、あえてreadedにしてしまうということです。
writeの過去形はwrote、過去分詞形はwrittenですが、こちらもあえてwritedにしてしまいます。
英語の正しい活用を知っている人ならそれが間違いであると瞬時に気付くでしょうが、意味がわからないかというとそんなことはないはずです。
合理的に物事を考えるなら、ブロークンであっても強引に規則変化させるのは悪くありません。

別の例も考えましょう。
英語の「register」という単語は名詞でも動詞でもあります。
しかし、registが動詞でそれに接尾辞-erを付けたものがregisterだと誤解しているプログラマーは結構います。
だからこそ、「regist」という語を命名に使うケースが多いのだと思います。

これも多少の違和感はあるものの意味は通じるので、別に構わないのかなと思っています。
「register」はCやC++では予約語で使えないという事情もあることですし。

ほかには、主にC++のイディオムにナルのですが、NVI(non-virtual interface)というのがあります。
具体的なコードを書くと……

のように、公開メンバ関数is_runningから非公開仮想関数do_is_runningを呼び出しています。
NVIでは仮想関数名に公開関数名の頭にdo_を付けることが多いように思います。
今回もそのようにしているのですが、「do is ~」というには英語としてはあまりにも違和感がありますね。
けれども、英語として違和感があるかどうかより対称性のほうが大事なのでこんな命名をしているのです。

私も若いころはなかなか融通が利かなかったのですが、歳を取るにつれて合理性のほうを優先するようになってきました。
今では英語として正しいかどうかなんてどうでもいいです。
というか、可能であれば英語での命名自体を一切やりたくないぐらいです。

    上に戻る