プロデルでプログラムを作るときに変数名などの識別子を日本語で考えますが、英単語を組み合わせて考えるときとは勝手が違うことがあります。今日は日本語で識別子を名付ける時のことを考えてみました。
日本語プログラミングを試す人が増えて来た!?
プロデルのような日本語プログラミング言語はもちろん、Unicodeに対応した最近の多くのプログラミング言語では、識別子(変数名や関数名など)に日本語(漢字,ひらがな,カタカナ)を使えるようになりました。最近では、例えばPythonやScalaなどで変数やメソッドに日本語を使う、といった「広義の日本語プログラミング」を試みている方が少しずつ見かけるように思います(ネタの意味もあるかと思いますが)。
日本語の識別子の名付け方は、広義の日本語プログラミングとプロデルのような日本語プログラミング言語で作るプログラムでも、似ている所があるはずです。ノウハウ共有できる事があるかも知れないのでQiitaに書いてみることにしました。
日本語で名付けるメリット
- コメントを減らすことができる
- 辞書で英単語を調べる手間が省ける
- 後で見たときにわかりやすい
「日本語はタイプ量が多くなる」というデメリットがよく挙げられがちですが、IMEそのものの補完機能やIDEの入力補完機能である程度カバーできるはずです。一方で、頭で英単語への置き換えたり逆に読み替えたりする手間は、もう少し重要視されてもよいのではないかと思っています。辞書を引く手間が省けますし、スペルミスや意味の通らない恥ずかしい英語を書いてしまう心配もありません。プログラムを書くときや長期的にメンテナンスされる観点で、日本語は利点があるはずです。
命名規則
大抵のプログラミング言語では、プログラムの識別子を名付ける時のルールがあり、それを命名規則とかネーミング規約と言われています。
例えば
- Javaでは、クラス名は大文字で始める(アッパーキャメルケース),メソッド名や変数名は小文字で始める(ローアーキャメルケース)
- インターフェイス型名は"I"で始める
などなど。プログラミング言語によって異なりますし、流派みたいなものもあるかと思います。
命名規則は、必ずしも守る必要は無く、ルールが1つに決まっているわけではないですが、ルールに従って名付けるとわかりやすいとされています。
日本語だと困る時
よく知られてる命名規則は、半角英数字を前提としているので、日本語で名付けるときには通用しないルールがあります。英単語は同じ言葉でも大文字と小文字で書き分けられる。といった違いを日本語では別の方法で書き分けないといけません。
ここでは次の識別子の書き分けについて考えてみます。
- クラス名とインスタンス名
- 配列
- 一時変数
クラス名とインスタンス名
オブジェクト指向プログラミングでは、クラス名とインスタンス名とをアッパーキャメルケース(例:Apple)とローアーキャメルケース(apple)とで書き分けてますが、日本語では書き分け出来ないので困ります。
ダメだったこと - カタカナとひながなで書き分けてみる
試しにキャメルケースの書き分けの代わりに、クラス名は漢字、インスタンスはひながなで書き分けてみました。
要素
ようそ
ヨウソ
ようそという要素を作る
ようその内容は、「Hello」
結論としては、漢字とひながなとで、ぱっと見でクラスとインスタンスとの関係があることがわかりにくいと感じました。同様にカタカナとひらがなでも何か不自然に感じました(主観的ですが)。
ようそというヨウソを作る
ようその内容は、「Hello」
インスタンス名はクラス名を末尾に付ける
英単語で名付ける場合、「Button」クラスのインスタンスには「okButton」「cancelButton」のようにクラス名をサフィックスとして付けてと名付けることがあります。同じように日本語でも、クラス名をサフィックスとして末尾に付けて2語以上で名付ける方法で落ち着きました。
「ボタン」クラスの場合、OKボタン
キャンセルボタン
配列
配列クラス名とインスタンス名とを単数形と複数形とで書き分けてますが、日本語は個数で書き分けることはないのでまた困ります。
ダメだった方法 - 末尾に「たち」「ら」を付けてみる
複数形を表す「s」の代わりに、「~たち」「~ら」を付けて書き分けることを試してみました。
例 要素たち
値ら
色たちは、{赤,白,黄色}
色たちを色でそれぞれ繰り返す
繰り返し終わり
sを付ける感覚で「たち」「ら」を付けるので名付けやすい反面、普通「たち」「ら」は人名に対して付けるので、自然な日本語からは違和感を感じてしまいました。
良かった方法
やはりサフィックスを付ける方法が良いように思います。末尾に「リスト」や「一覧」を付ける方法が馴染んでいます。
色一覧は、{赤,白,黄色}
色一覧を色でそれぞれ繰り返す
繰り返し終わり
一時変数
色々考えていると、ループなどで使用する一時変数の名付け方も気になってきます。
私がプロデルでプログラムを書く際には、ちょっと使うような変数に一般にa
とかb
とかで名付けるのと同様に「あ」とか「い」とかで名付けています。ループ処理では番号
やカウント
,要素
といった定番の名前を決めて付けることが多いです。
また、計算ロジックなどのアルゴリズムを含むプログラムではi,jとかx,yとか、アルファベットをそのまま使うこともあります。他の方が書いたプロデルプログラムを拝見しても、そういった名付け方をしている方を見かけますし、この方が良いと思います。「日本語プログラミング言語ならば必ず日本語表記を使わなければならない」とは思いません。
あは、10
いは、20
1から10までカウントを増やしながら繰り返す
繰り返し終わり
1からwまでxを増やしながら繰り返す
1からhまでyを増やしながら繰り返す
繰り返し終わり
繰り返し終わり
わかったこと
日本語プログラミングをしてみて思うことは、少なくても既存の命名規則をそのまま日本語に置き換えることは難しいということです。未だに「これ」という書き方を定めるには至っておらず、試行錯誤しています。
命名規則は例えばクラスやインスタンスの書き分けが必要といったプログラミング言語処理系の特有の事情にも依存するので、日本語で名付ける時にもその言語の事情に応じた命名規則を別に考えていく必要はありそうです。
プロデルのような日本語プログラミング言語の場合、言語仕様や文法として取り入れて定めるべき所と、プログラムを書く人に委ねて自由に決められる所との、棲み分けも必要かなと思っています。
一方、一般の言語ではエディタが入力補完が日本語を前提としていないため、入力補完機能に適した名付け方もあると思います。読みやすさを犠牲にしても対象入力補完が有効に働く名前を付ける必要があるかと思います。
日本語プログラミングを実践している皆さまと、色々な書き方を持ち寄って、良い書き方を探していけたら嬉しいです。