プログラミング

『リーダブルコード』第Ⅰ部の要点と実例:読みやすいコードを書くための改善法

この記事は約4分で読めます。

こんにちは。

今回の記事では、『リーダブルコード』第Ⅰ部の要点と実例を紹介します。

『リーダブルコード』は読みやすいコードを書くためのヒントが紹介されており、堅苦しくない解説個性的な挿絵イラストが特徴的です。

第Ⅰ部では表面的な改善について詳しく説明されています。具体的には、適切な名前や、優れたコメントなどの改善方法が取り上げられています。

これらの改善はすぐに実践できるものばかりですが、小さな改善を積み重ねることで読みやすいコードになると考えられます。

名前に情報を詰め込む(2章)

名前は短いコメントのようなものです。
短くても、良い名前には多くの情報が含まれています。

明確な単語を選ぶ(2.1節)

例えば、インターネットから画像を取得する場合、 getImage() よりも downloadImage() の方が具体的な状況が推測できます。

英単語は一意ではなく、単語の選択は文脈に依存するため、具体的な状況に合った単語を選ぶことが重要です。
本書では文脈に合う単語を選ぶ際にシソーラス(類語辞典)の使用が推奨されています。

汎用的な名前を避ける(2.2節)

retVal からは「返り値ですよ〜」という情報しか得られません。
実装している関数/メソッドの目的に即した“具体的な”変数名を使用するべきです。

Java
public double circle(double radius) {
  // double retVal = Math.PI * radius * radius;
  double area = Math.PI * radius * radius;
  // area = 面積
  
  return area;
}

ループイテレータの i j にも「イテレータですよ〜」という情報しかありません。
特に複数のイテレータを使っている場合は“意味”を持たせましょう。

Java
for (int ci = 0; ci < clubs.length; ci++) {
    for (int mi = 0; mi < members[i].length; mi++) {
        for (int ui = 0; ui < users.length; ui++) {
            //if (clubs[ci].members[ui] == users[mi]) // イテレータが違う!
            if (clubs[ci].members[mi] == users[ui]) { ... }
            // 配列の頭文字を先頭に付けるだけでも見やすくなる
        }
    }
}

コメントすべきこと(5章)

コメントの目的は、書き手の意図を読み手に知らせることです。

コードから”すぐ”分かることはコメントしない(5.1節)

良かれと思って書いたコメントの情報量が少ないとと時間の無駄になりかねません。
価値のないコメントの例の一つは「コードから”すぐ”分かること」です。

Java
// Accountクラスの定義
class Person {
  // フィールド
  private String name;
  
  // コンストラクタ
  public Person() { ... }
  
  // フィールドnameに新しい値を設定する
  public void setName(String name) {
    this.name = name;
  }
  
}

上記の例はコード自体から得られる情報以上の内容を提供していないため不要なコメントと言えます。

コードの目的や要約をコメントする(5.3節)

コードを読む人はそのコードについて何も知らない他人であるか、数週間後の自分である可能性があります。
何がしたくて書枯れたコードなのか(目的)/ここでは何をしているのか(要約)を伝えることで、コードに対する抵抗感は薄れます。

Java
// 顧客が自分で購入した商品を検索する
for (String customerId : allCustomers) {
    for (Sale sale : allSales.get(customerId).getSales()) {
        if (sale.getRecipient().equals(customerId)) {
            // 処理
        }
    }
}

まとめ

今回は、比較的簡単に取り入れることのできる「表面的な改善」についてまとめました。

具体的な例を挙げることで実践的な内容となっていますので、コーディングの際に参考にしてみてください。

コメント