書籍「リーダブルコード」 4章 まとめ

美しいコードは読みやすい

鍵となる考え方:一貫性は「正しい」より大切

一貫性のある簡潔な改行位置

単位を補足するようなコメントは、一箇所にまとめた方が簡潔で分かりやすくなる。

これよりも

public statc Car car1 = 
    new Car(
        180,    /*km/h*/
        200     /*ps*/
        1200    /*cc*/
    );

public statc Car car2 = 
    new Car(
        120,    /*km/h*/
        250     /*ps*/
        660     /*cc*/
    );

こちらの方が読みやすい。

//Car(maxSpeed, maxPower, engineDisplacement)
//    [km/h]    [ps]     [cc]

public static Car car1 = new Car(180, 200, 1200);
public static Car car2 = new Car(120, 250, 660);
メソッドを使った整列

何度も同じ処理を行なってるようだったらメソッド化する。

※悪い例

string error = "";
assert(ExpandFullName(database_connection,  "Kato", &error)
    = "Mr. Kato");
assert(error = "");
assert(ExpandFullName(database_connection,  "Ato", &error) = "");
assert(error = "no match found");

※いい例

void CheckFullName(string partial_name,
                   string expected_full_name, 
                   string expected_error){
    string error;
    string full_name = ExpandFullName(database_connection,  partial_name, &error);
    assert(error == expected_error);
    assert(full_name == expected_full_name);
}

checkFullName("Kato","Mr.kato","")
checkFullName("Ato","Mr.Ato","no match found")

下のコードは以下のようなメリットがある。

  • テストコードとケースの可読性の向上
  • メソッド化したことで、テストの追加が容易になった

コードの見た目を良くすることは、表面だけでなく構造も改善にも繋がる。

縦の線をまっすぐにする

コードの要素を縦に整列させることで見やすくなり、僅かな差異によるミスも減らせる。

checkFullName("Ryo Kato","Mr.kato","")
checkFullName("Ato"     ,"Mr.Ato" ,"no match found")
checkFullName("none"    ,""       ,"no match found")

但し、コードを整列する手間や、一部を変更した際に全体も変更しなければならないため、最低限以下のことを意識する。

似ているコードは、なるべく似ている見せ方をする

一貫性と意味のある並び

複数のコードの要素を並べる際は、以下のことを意識しながら、意味のある並べ方をした方がいい。

  • 対応するHTMLのフォームの並びを踏襲
  • 重要度順に並べる
  • アルファベット順

また、途中で並べ方を変えると混乱するので、全体で統一すべきである。

宣言をブロックにまとめ、手順を明確にする
  • 手順ごとにコードを単位化する
  • 単位ごとに段落分けする