書籍「リーダブルコード」 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のフォームの並びを踏襲
- 重要度順に並べる
- アルファベット順
また、途中で並べ方を変えると混乱するので、全体で統一すべきである。
宣言をブロックにまとめ、手順を明確にする
- 手順ごとにコードを単位化する
- 単位ごとに段落分けする