良いプログラムとは

プログラミングを勉強しているんだけど、良いプログラムってどんなものなんだろう?

本記事では、上記のような疑問を解決します。

本記事の内容
  • 良いプログラムが分かる
  • 良しとされているプログラムの重要性が分かる
  • 良いプログラムを書けるようになる方法

特にプログラミングの経験が浅い方は「良いプログラム」を知ることで、仕事の生産性が大きく変わってきます。ぜひ良いプログラムを知っておくと良いでしょう。

では次から具体的に説明していきます。

目次

良いプログラムとは

結論からですが、『良いプログラム』とは以下のとおりです。

  • 読みやすい
  • 理解しやすい
  • 修正しやすい

上記のとおりです。

なぜなら、プログラムは今正しく動作することも大切だが、今後に読まれることもたくさんあるからです。

システムは完成したあとも修正されるケースが多々あり、たとえばバグの修正や新たに機能追加をするときにプログラムに対して変更を加えていきます。

そのため、他人が後から見ても分かりやすいプログラムである必要があります。『今正しく動作することも大切ですが、今後に読まれて理解しやすいプログラムであることも大切』です。

以降でさらにそれぞれの詳細を解説していきます。

読みやすいプログラム

読みやすいプログラムとは、整っていて綺麗なプログラムです。

例えば、以下のようなプログラムになります。

  • インデントが整っている
  • 改行の位置が整っている
  • スペースを入れる箇所が整っている

インデントが整っている

インデントについては基本中の基本になります。

下の例を見てもらえれば分かると思いますが、インデントが揃っていた方が確実に見やすいです。

【良い例】
public class mojicut {
    public static void main(String[] args) {
        String mae_str = "あいうえお";
        System.out.println("切り出し前:" + mae_str);
        String ato_str = mae_str.substring(3, 7);
        System.out.println("切り出し後:" + ato_str);
    }
}
【悪い例】
public class mojicut {
public static void main(String[] args) {
String mae_str = "あいうえお";
System.out.println("切り出し前:" + mae_str);
String ato_str = mae_str.substring(3, 7);
System.out.println("切り出し後:" + ato_str);
}
}

改行の位置が整っている

改行の位置も統一されていると見やすくなります。

今回の例は「,(カンマ)」で改行しています。

【良い例】
public class mojicut {
    public static void main(String[] args) {
    ~省略~
        getCustomerName(
          変数xxxx,
          変数xxx,
          変数xxxxxxx,
          変数xxx
        );
        getItemName(
          変数xxxxx,
          変数xxxxxxx,
          変数xxx
        );
    ~省略~
    }
}
【悪い例】
public class mojicut {
    public static void main(String[] args) {
    ~省略~
        getCustomerName(変数xxxx,変数xxx,
          変数xxxxxxx,変数xxx
        );
        getItemName(変数xxxxx,変数xxxxxxx,
          変数xxx);
    ~省略~
    }
}

スペースを入れる箇所が整っている

スペースを1つ入れることでもプログラムの見やすさが変わってきます。

【良い例】
public class mojicut {
    public static void main(String[] args) {
    ~省略~
        getCustomerName(変数xxxx, 変数xxx, 変数xxxxxxx, 変数xxx, 変数xxxxxx, 変数xxxxx);
        getItemName(変数x, 変数xxxx, 変数xxx, 変数xxx, 変数xx, 変数xxx, 変数xxxx);
    ~省略~
    }
}
【悪い例】
public class mojicut {
    public static void main(String[] args) {
    ~省略~
        getCustomerName(変数xxxx,変数xxx, 変数xxxxxxx,変数xxx,変数xxxxxx, 変数xxxxx);
        getItemName(変数x, 変数xxxx,変数xxx,x変数xxx, 変数xx,変数xxx,変数xxxx);
    ~省略~
    }
}

理解しやすいプログラム

理解しやすいプログラムとは、以下のようなプログラムです。

  • 変数やメソッドのネーミングが適切
  • ソースコメントが適切

変数やメソッドのネーミングが適切

【良い例】
public class mojicut {
    public static void main(String[] args) {
        String mae_str = "あいうえお";
        System.out.println("切り出し前:" + mae_str);
        String ato_str = mae_str.substring(3, 7);
        System.out.println("切り出し後:" + ato_str);
    }
}
【悪い例】
public class mojicut {
    public static void main(String[] args) {
        String str1 = "あいうえお";
        System.out.println("切り出し前:" + str1);
        String str2 = mae_str.substring(3, 7);
        System.out.println("切り出し後:" + str2);
    }
}

明確なネーミングや名前が長くなる場合は、より機能分割ができないかも考える

ソースコメントが適切

プログラム上のコメントが適切であると、後から見た人が理解するときにかなり役立ちます。

プログラムの1行ごとに記載する必要はありません。逆にそうしてしまうと煩雑になってしまいます。

プログラムを見れば何をやっているのか分かるものは記載する必要はありません。その処理ブロックが何を行うためのものなのかや、何か特別なことを行うのであれば記載が必要です。

コメントは後から見た人に情報を伝えるものです。注意点や意図など、有益な情報を伝えましょう。

修正しやすいプログラム

修正しやすいプログラムというものは、「適切にソースコードが分割されている」プログラムです。

それによって以下の2点のメリットがあります。

  • メンテナンス性の向上
  • 処理の再利用が可能

それぞれ詳しく説明していきます。

メンテンナス性の向上

ソースコードを分割することでメンテナンス性が向上します。

処理を分割すると、変数のスコープを狭くできたり、そもそも処理自体も独立させることができるため、エラー発生時には原因の特定が行いやすくなります。

また、処理の追加を行う場合にもスムーズに作業することができます。

処理を追加する場合には、もともとの処理部に影響のない形で追加しなければなりません。ソースコードが分割されていない場合だと、変数のスコープも広く処理も複雑に絡み合うため、影響がないことの確認に時間を要してしまいます。

これらのことから、ソースコードを分割することでメンテナンス性が向上します。

再利用性が可能

プログラムの中では同じ処理を複数回行う必要がある場合があります。

処理を行う都度、プログラムソースを書いた場合には同じソースコードが複数回登場してしまいます。もしその処理の中の一部に変更が必要になった場合には、複数個所の変更が必要になります。

このような場合には、同じ処理部は共通化(部品化イメージ)し、必要な時にその部品の処理を呼び出す形をとることが望ましいです。そうすることで修正が入ったとしても部品化されている処理の一部を修正すればOKになります。

プログラムを作成するときには、同じ処理は部品化できないかを検討すると良いでしょう。

良いプログラムを書けるようになるためには

これまでで「良いプログラムとは何か」が理解できたと思います。

次に、良いプログラムを書けるようになるにはどうしたら良いのでしょうか?

ずばり結論ですが、以下のことに取り組んでみると良いでしょう。

  • プログラムをたくさん見る
  • リーダブルコードを読む

プログラムをたくさん見る

まずは、プログラムをたくさん見ると良いです。

なんでもそうですが、「人の良いところを真似る」ことで学びにつながります。

これまでも述べてきましたが、変数やメソッドの名前、構造、コメントの付け方など、いろんなプログラムを見ると参考になることが多いでしょう。

逆に、「このプログラム見にくいな」と思うことがあると思います。そういったプログラムにならないように注意することができます。

リーダブルコードを読むべし

リーダブルコードとは、「より良いコードを書くためのシンプルで実践的なテクニック」が書かれた本になります。

この本は「コードは理解しやすくなければならない。」という原則を日々のコーディングの様々な場面に当てはめる方法が紹介されています。

変数や関数の名前の付け方や、ソースコメントのあるべき姿などの表面上の改善から、プログラムの中身である制御フロー、論理式、変数などループとロジックについて、そしてプログラムソースコードを再構成するための方法等です。

本書の「はじめに」

少しだけご紹介するとこんな感じ。

美しいコードを見ると感動する。

優れたコードは見た瞬間に何をしているかが伝わってくる。

そういうコードは使うのが楽しいし、自分のコードもそうあるべきだと思わせてくれる。

本書の目的は、君のコードを良くすることだ。

「わくわく」しませんか?プログラムを行うすべての人が一度見るべき本だと思います。

目次