レガシーコードからの脱却 まとめ – 12.5 – 12.6

12.5 意図によるプログラミング

内容

API、メソッド、サービスなどを外部に公開するとき、メソッドの中に実装を入れることはしない。実装は別のメソッドに移譲する。
こうすれば、コードが読みやすくなる。

このテクニックを「意図によるプログラミング」と呼んでいる。(へー、そうなんだ)

なぜ読みやすくなるのか?
抽象レベルと具象レベルで観点が切り分けられ、観点に一貫性が出るから。
抽象レベルでは「目的」を、具象レベルでは「やり方」を見ることができる。

抽象レベルを読み進めることで、プログラムの大枠の文脈を読むことができる。
必要に応じて具象レベルの具体的な方法を読めば良い。

12.6 循環複雑度を減らす

循環複雑度はコードの実行経路の数。

条件分岐がなければ、循環複雑度は1。
条件分岐が1つの場合、異なる2つの経路があるので循環複雑度は2。
2つの場合は4、3つの場合は8。。。

循環複雑度は幾何級数的に大きくなる。
大きければ大きいほど条件パターンが増え、注意が行き届かなくなる場合があり、バグの発生率が高くなる。

なので少ないに越したことはない。

しかし、常に1にすることはできない。条件分岐を使わないことは実質ありえないからだ。
循環複雑度を減らすテクニックとして、インスタンスの生成やメソッドの利用にポリモーフィズムを使う。そうすることで、プログラム上の条件分岐がなくなる。

学び

  • パブリックにするものは抽象レベルで定義すると、大きな文脈で読むことができるプログラムになりやすい。
  • 「意図によるプログラミング」というワードでググってもわかりやすい情報は出てこない。。
  • 循環複雑度はバグの原因になるからなるべく減らそう。ポリモーフィズムを使っても減らすことができる。
  • 循環複雑度は常に1にはできないよ。

学びを活かすアイディア・行動

  • 現場のコーディング規約づくり。抽象レベルの切り分けルール。
  • 現場のコーディング規約づくり。

kiyoshi.saito@tttsunagari.jp

アプリ開発をメインにWebアプリ開発をやってるフリーランスエンジニアです。

Leave a Reply

Your email address will not be published. Required fields are marked *