引用文献
コードの良し悪しを判断する指標について言語化されていたので備忘録。。。
コードの良し悪しを判断する指標
実行可能コードの行数
実行可能なロジックを含む行数が多いと、多くのことをやりすぎている可能性がある。
適切なコード行数の一例(RuboCopのデフォルト設定)
スコープ | 行数上限 |
---|---|
メソッド | 10行以内 |
クラス | 100行以内 |
行数が多すぎる場合は、メソッドやクラスの分割を検討する。
循環的複雑度
コードの構造的な複雑さを示す指標で、条件分岐やループ回数が増える、ネストすると複雑さは増大する。
複雑度は、早期returnなどのテクニックを駆使することで低減可能。
凝集度
モジュール内における、データとロジックの関係性の強さを表す指標。
具体的には、インスタンス変数とそのインスタンス変数を用いるロジックが同じクラス内に実装されていると凝集度が高いと言える。
結合度
モジュール間の依存の度合いを示す指標。
依存しているクラスが多いほど、すなわち結合度が増大するほど多くの変更影響を考慮する必要がある、保守や仕様変更が困難になる。
チャンク
クラス設計の際に、マジカルナンバー4を心がける。近年の認知心理学の研究において、人間の短期記憶は一度に4±1個の概念しか把握できないという説があり、この個数をマジカルナンバー4と呼ぶ。
この記憶個数の単位をチャンクと呼ぶ。
クラス設計の際に、クラス内部で取り扱う概念が4±1個に収まるように設計し、大きなクラスは小さなクラスに分割する。