状態、結合、複雑性、コード量の順に最適化する
コードがよりステートレスになる場合は、結合を増やしてもかまわない コードの複雑さが軽減される場合は、コードをコピーする
状態、結合度、または複雑性が増さない場合にのみ、コードを重複排除する
ステートレスロジックは、通常のコード実行、並列処理、分散処理のいずれでも同じように機能する 初心者のプログラマがコード削減を最適化する理由は、4つのうちで最も見つけやすいから 他の3つはこれに比べてはるかに微妙で主観的であるため、発見するにはより多くの経験が必要になる 優先順位をこの順序で学習することで、非常に優れた開発者になれた
ohbarye.icon プロとアマチュアのプログラマはコードベースを成長させる際の優先順位を確認することでわかる
別のコメントに対するレス
「ステートレスかどうかと結合度は直行する概念では?」
対立するシーンはいくつもある
たとえばシステムコンポーネントがジョブキューをインメモリ(状態)で管理する場合、その状態を別のキュー管理コンポーネントに任せる(結合)ほうがうまく状態を管理でき、明示的になる
「複雑性は結合度が生み出すものでは?」
複雑性にはたくさんの種類があり、結合はその一形態
有名なハッシュ関数の実装を見れば、結合度とは関係ない複数種類の複雑性を見ることができる 複数の複雑性の組み合わせこそが複雑性であり、プログラマの認知負荷を高めるものだ
ohbarye.icon 関連
構造化プログラミングは、直接的な制御の移行に規律を課すものである
オブジェクト指向プログラミングは、間接的な制御の移行に規律を課すものである
関数型プログラミングは、代入に規律を課すものである
不変コンポーネントは可変変数を使わず純粋関数的にタスクを行う 単一責任の原則により、アクターの異なるコードは分割する 複数のアクター間で状態が共有されることを避ける