コード設計に関する本を読んだのでその感想

今回読んだ本

プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則
良いコード/悪いコードで学ぶ設計入門―保守しやすい 成長し続けるコードの書き方

プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則

はじめに

本書では「プログラミングに銀の弾丸はない」と書かれており、
プログラミングをするにあたって”これさえすれば上手くいく”などのことはないと表現されています。
ソフトウェアが大きくなるにつれて複雑化していき、色々な問題が出てくるがそれらを少しでも改善していけるようなこの本には記載されています。

まず心がけようと思った内容

コードは設計書である
  • コードには「How」や「What」は表現されているが、「Why」の設計理由が無いことが多いのでこちらを記載していると今後の修正で判断材料として役に立つ
  • 今、記述しているそのコードは変更される前提として「変更に強いコード」を書くこと
  • コードは書いている時間よりも読んでいる時間のほうが長くなってくるので「読みやすいコード」を書くこと
KISS(Keep It Simple, Stupid)
  • コードをシンプルに保つこと
  • 自然に身を任せて修正すると無秩序かつ複雑になり、コードを読みにくくしたり・修正がしにくくなる
DRY(Don’t Repeat Yourself)
  • 同じコードを重複して書かないこと
  • 同じようなコードが複数あると量が多くなり、質が複雑になる
名前重要
  • 命名からどんな処理か推測ができることが大事
  • 適切な名前を付けられることで設計の大部分が完成したと言っても過言ではない
ボーイスカウトの規則
  • 自分が着手したときより少しでもコードを改善する努力をする
防御的プログラミング
  • 「こうなるはずだ」と決めつけないでプログラミングすること
  • 関数に不正なデータが渡されたときにそれが他の関数のせいであっても、被害を受けないような「防御的な」コードを書いておくこと
ラバーダッキング
  • 今、自分が抱えている問題などを「誰か」に説明することで自ら気付き、自己解決できることがある

良いコード/悪いコードで学ぶ設計入門―保守しやすい 成長し続けるコードの書き方

はじめに

本書はサンプルコードを例に具体的な設計に関する手法が解説されています。
「実際にこういう場面あったな・自分もこうしていたかも」などのことを思いながら読み進めていくと今後はもっとよくコードが書けるんじゃないかと思えるような1冊となっています。

まず心がけようと思った内容

設計の初歩
  • 変数名、メソッド名、クラス名からなるべく内容がわかるような名前にする
  • 変数を使い回さずに目的ごとの変数を用意する
  • メソッドは意味のあるまとまりで記述する
  • 名前は省略せずに意図が伝わる名前を設計する
クラス設計
  • インスタンス変数を不変にすることで思わぬ動作を防ぐ
  • 変更したい場合には新しいインスタンスを作成する
  • コンストラクタで正常値を渡すように確認を行う
不変の活用
  • 不変にして変数への再代入を防ぐ
  • メソッドの引数も不変にする
  • 可変にする場合は以下のような場合
    ・値の変更が膨大に発生する
    ・インスタンス生成に時間がかかり、パフォーマンスに影響する
    ・スコープ範囲が局所的
低凝集について

まず凝集度というものがあり、こちらは「モジュール内における、データとロジックの関係性の強さを表す指標」のこと
高凝集と低凝集があり、低凝集は壊れやすくて変更が困難なことを指します。

  • コンストラクタをprivateにして用途を絞る
  • 用途不明で汎用的な名前は使わない
    ・CommonやUtilなど
  • 多すぎる引数は使わない
条件分岐について
  • 条件分岐のネストが深くなることによる可読性低下
  • ネストが深くならないように早い段階でreturnをすることで解消されることがある
  • if句の中にif句だけでなく、else句がありすぎても可読性低下に繋がるため、早い段階でのreturnを意識付ける

最後に

2冊とも本当に様々な設計に関するスキルが記載されており、全てを一気に取り組むのは難しいかと思いますが、取り入れられそうなことから始めて行くことで将来的に読みやすいコードになったり、後続の保守や修正作業が楽になったりすると思います。
コードの書き方はわかったつもりだけど、どんなコードを書いてどんな設計にすればよいのかわからないといった方におすすめの本になっています。
私も部分的にでも読み直してただ動くコードを書くのではなく、良いコードを書ける取り組みをしていきます。


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です