Processingで学ぶ 実践的プログラミング専門課程

第3回 ネーミングルールを持とう

この記事を読むのに必要な時間:およそ 4 分

導入

コーディングルール(またはコーディング規約とは,ソースコードを書く際の約束事です。

コーディングルールを決めて守ることで,統一感があり読みやすいコードになります。コードが読みやすいとメンテナンスがしやすくなります。メンテナンスがしやすければバグが入り込む可能性が小さくなります。複数人でコーディングするならば,コーディングルールを取り決めることが必要です。コーディングルールの違いで意思の疎通が滞るなど,この上なく無駄なことです。

唯一絶対のコーディングルールはありませんが,ある程度一般的に認知されている標準的なルールがあります。なるべく標準的なルールを元に決定すると便利です。全国から集まった人たちが話し合いをするときに,標準語を使用することが好ましいことに似ています。

今回はコーディングルールの一つ,ネーミングのルールを学習します。

展開

大前提:意味のある名前をつける

大前提でありながら,意外といい加減になっているのが意味のある名前をつけることです。とりあえず動くコードを書くために,つい適当な名前の変数やメソッドを作ってしまうことがあるものです。適当とまでは行かないまでも,思慮に欠ける名前をつけたことはないでしょうか。そしてそれを各所で使ううちに,適切な名前に直す手間がおっくうになって,そのまま放置してしまいます。数日後,その変数やメソッドを作ったのはなぜか,意味は何なのかが分からなくなっているのです。

例えば,次のコードChokeYourself.pdeを見てください。

ChokeYourself.pde

class House{
  House(){
    println("House object created.");
  }
  void open(int n){
    println("No. " + n + " Door opened!");
  }
} // end of class House

House h    = new House();
int   temp = 0; // 典型的な無意味名称。何に使ってるんだっけ?

void setup(){
  temp = 5; // あれ?tempって何の意味だっけ?
  h.open(temp); // open?何を?窓を?ドアをだっけ?
} // end of void setup

メソッドopenは窓を開けるのか,ドアを開けるのかコードだけでは判定できません。やがてopenDoorメソッドやopenWindowメソッドを作ることになるでしょう。あるいはopen(DOOR)open(WINDOW,3)などとしてもよいでしょう。単にopenだけでは何をどうしたかったのか,書いた本人も忘れてしまうことでしょう。

また,整数変数tempは何のための変数でしょうか。最後までコードを追って行き,Houseクラスの実装と照らし合わせると,開くドアの番号であろうと推測できました。それならばdoorNumberなどと目的をはっきり記述した名前にするべきです。open(doorNumber)とメソッドを呼べばコードの意図が明確になります。

変数やメソッド,クラスなど,名前をつけるのはなかなか頭を使う仕事です。ここで労力を割いていい名前をつけておくと,後々楽になります。書き捨てのスクリプトではなく,コードを書くならば,名前はしっかり考えてつけましょう。

[作業] 開いたドアや窓は閉めなければなりません。閉じるメソッドの名称や引数の取り方を検討してください。

[作業] 「開く」「閉じる」を家に属するメソッドと考えてきましたが,その他にも別のクラスのメソッドにすることが考えられます。どのような考え方ができるか検討してください。

英語を使おう

プログラミング言語の各命令は,英語を元に作られています。ですから変数名やクラス名は英語で記述するほうが読む際に自然です。

GoodCode.pde

String name = "Taro";
int    age  = 16;
float  height = 173.5;
print("Hello " + name + 
      ". You are " + age + " years old! "
       + height + " cm tall.");

String「コンピュータ用語として文字列」を表す英語ですし,print「表示」を表す英語です。

ところで,Java言語ではUnicodeの文字列ならば,日本語で変数名やクラス名,メソッド名を作成することができます。

Unicodeの変数名を持つコードを実行したところ

画像

しかし,この連載で学んでいる方は是非ともProcessingやJavaのコードを英語で書くようにしてください。一番の理由は英語やローマ字,その他の言語の単語がコードに並ぶと紛らわしいことです。

Bad.java

String shimei = "Taro";
int    toshi  = 16;
float   身長 = 173.5;
println("Hello " + shimei + ". You are " + toshi + " years old! " 
        + 身長 + " cm tall.");

変数名ならまだしも,メソッド名がローマ字だと混乱の極みです。この程度のJavaコードはProcessingでもほぼそのまま動くのですが,float型で宣言した変数「身長」はProcessingではエラーになります。

私たち日本人には,ローマ字や日本語で書かれた変数名やメソッド名は分かりやすいものです。個人だけで使用するコードやごく少人数のチームでコードを共有する場合などでは,日本語の変数名やメソッド名を絶対的には否定しません。実際,日本語変数や関数名,メソッド名を推奨するプログラミング言語がありますし,予約語が日本語という言語もあります。

しかし,Java言語やProcessingを使用している場合,すべての実行環境で日本語で書かれたコードが実行可能か保証がありません。実際,現在このテキストで利用しているバージョンのProcessingの開発環境(Ver.2.2.1)ではコンパイルを通してくれません。

ProcessingでUnicodeの変数名を利用したところ

画像

なるべくメンテナンス性の高いソースコードを書くためにも,得意不得意に関わらず適切な英語を使う努力をしましょう。より多くの人たちとコードを共有する希望を持っているなら,なおさらコードには英語を用いましょう。

ソフトウエアの世界では英語が必須です。

もし,使用した英語に不安があるならば,コメントにネーミングの意図を日本語で書き残しましょう。

[作業] 次のsketchに使われている変数を,適切な英単語を調べて書き換えてください。

変数名を省略する事で,比較的読みやすい場合

double taijyuu = 75.4; // [kg]
double shintyou = 174.3 * 0.01; // [m]
double bmi = taijyuu / (shintyou * shintyou);
println("あなたのBMIは" + bmi + "です。");

著者プロフィール

平田敦(ひらたあつし)

地方都市の公立工業高等学校教諭。趣味はプログラミングと日本の端っこ踏破旅行。やがては結城浩氏のような仕事をしたいと妄想している。

Twitter : @hirata_atsushi

コメント

  • Re: 解答ファイルへのリンク切れ

    ご返事が遅くなりました。

    リンク切れのご報告,ありがとうございます。確認したところ,単純にリンクの記述が間違っていました。

    現在はすでに修正済みです。具体的には,以下のとおりです。

    http://image.gihyo.co.jp/assets/files/dev/serial/01/practical-programming-with-processing/0003/CalcAreaTrapezoid.pde

    以上をもちまして,回答とさせていただきます。

    Commented : #2  gihyo.jp編集部 (2016/03/03, 11:18)

  • 解答ファイルへのリンク切れ

    最近になって本サイトの存在を知り、学習に活用させていただいております。
    表題の件ですが、第3回 演習3の解答(CalcAreaTrapezoid.pde)のリンクが切れているようです。
    ご確認いただけると幸いです。

    Commented : #1  m_goto (2016/02/29, 11:58)

コメントの記入