プログラムが自分の計画したとおりに動作したとしてもなお、そのソースコードが人間にとって読みやすいかどうかというのは重要な要素になります。というのも、自分が作成したソースコードを誰かに見てもらったり改修してもらったりすることがあるかもしれませんし、ずっと後(例えば 10年後)に自分が再び読み返して改修することになるかもしれません。
そんな時、作ったソースコードが人間にとって読みづらいものだと、やはり…読解するために苦痛を感じますし、時間的ロスも大きいです。読みやすいソースコードについて突き詰めると、関数化やアルゴリズムやデザインパターンへとどんどん話が飛躍して果てしないことになるので、ここでは基本的な 3つのルールについてのみ解説します。
3つのルールとは以下の通り。
それぞれの項目について、以下で見ていきたいと思います。
インデントを守ることは基本中の基本。インデントが正しくないと、ソースコードを追うことは非常に難しくなります。例えば、以下のプログラムを見てどうだろう。
C201/HelloWorld.java
/** * ハローワールドを表示します。 */ public class HelloWorld { /** * メインメソッド。 * @param args 引数 */ public static void main(String[] args) { // Hello, world!を表示する System.out.println("Hello, world!"); } }
これほど単純なプログラムのソースコードであっても、括弧の開き { と閉じ } が対応しているかどうか一見しただけでは分からなくなっています。もちろん、プログラムは正常に動作します。ただし、ソースコードを実際に書くのは人間です。人間にとって読みやすくしておかないと、あとあと困ることになります。
Javaでは、基本的には { が登場する度にインデントを 1段深くします。また、 } が登場する度にインデントを 1段浅くします。一部の特殊な事例(例えば switch文など)では別のルールがありますが、基本的にはインデントは簡単なことです。すぐに見慣れるようになりますし、eclipseのテキストエディタでの編集中に、ある程度、インデントを自動調整してくれます。
なお、Pythonというプログラミング言語では、インデントが文法上の意味を持ちます。インデントというものは、一般にそれくらい大切だということでもあります。
プログラムの実行内容には影響しないけれど、人間にとって読みやすいソースコードを記述するために、適宜コメントを記述するようにしましょう。コメントがまったくないソースコードでは、どこでどんな処理をしているのか分かりづらいことが多いです。
コメントには以下の 3種類があります。
このうち、一行コメントと複数行コメントについては自由な形式で記述することができます。なお、本ウェブサイトでは、一行コメントと Javadocコメントのみを使用し、複数行コメントについてはごく一部を除いて使用していません。
Javadocコメントは、Javadocというツールで処理することを想定した特殊なコメントで、定められた形式に従って記述します。詳細については後の章で軽く解説しますが、本ウェブサイトのサンプルプログラムを見ていく中で、おおよそ分かると思います。
コメントのサンプルは以下です。あまりにコメントだらけだと逆に読みづらくなりますので、実際のソースコードでは適度に記述します。
C202/HelloWorld.java
/** * ハローワールドを表示します(これはJavadocコメント)。 */ public class HelloWorld { /** * メインメソッド(これはJavadocコメント)。 * @param args 引数 */ public static void main(String[] args) { // Hello, world!を表示する(これは一行コメント) // (これも一行コメント) System.out.println("Hello, world!"); // 出力(これも一行コメント) /* * コメントコメント。 * (複数行コメント) */ /* コメントコメント。 (複数行コメント) */ } }
ここまで学習した時点で、名前をつけられるものはファイル名(=クラス名)だけですが、今後、変数名やメソッド名などいろいろなものに名前を決めていくことになります。つけられた名前と実際が乖離していると、やはり無用な誤解を与えてしまいます。手ごろな名前を決めるというのは、簡単そうで奥深いものです。
「Hello, world!」を表示するプログラムに対して、誤解を与えるような名前(PolygonShooting)をつけてみた例が以下です。
C203/PolygonShooting.java
/** * ハローワールドを表示します。 */ public class PolygonShooting { /** * メインメソッド。 * @param args 引数 */ public static void main(String[] args) { // Hello, world!を表示する System.out.println("Hello, world!"); } }
ポリゴンシューティングかと思いきや、ただ「Hello, world!」を表示するだけのプログラム。
実態にそぐわないネーミングはやはり紛らわしく、人間にとって読みにくいソースコードとなります。
ここでは「正しいインデントを守る」「適宜コメントを記述する」「よく考えて名前をつける」の 3点について記述しました。
これらはプログラムの実際の動作には何の影響もしません。しかし、人間にとって読みやすいソースコードを記述することを心がけましょう。