関数は、コードの重複を最小限に抑えるためだけに使用されるわけではありません。長い関数をより小さな関数に分割して読みやすさを高め、コードを自己コメント化するためにも使用されます。ただし、このゲインは、関数またはメソッドごとのLOC数に直接反比例するわけではありません。それ以外の場合は、1行または2行のコードのみが含まれる多数の関数があります。
これにより、機能ごとに最適な数のLOCが存在するかどうか疑問に思います。もしそうなら、それは何であり、言語間で逸脱していますか?
関数は、コードの重複を最小限に抑えるためだけに使用されるわけではありません。長い関数をより小さな関数に分割して読みやすさを高め、コードを自己コメント化するためにも使用されます。ただし、このゲインは、関数またはメソッドごとのLOC数に直接反比例するわけではありません。それ以外の場合は、1行または2行のコードのみが含まれる多数の関数があります。
これにより、機能ごとに最適な数のLOCが存在するかどうか疑問に思います。もしそうなら、それは何であり、言語間で逸脱していますか?
回答:
行数の代わりに、私が使用する基準は、各関数が1つのことだけを実行し、適切に実行することです。
古い経験則では、スクロールする必要なく、関数は画面上に完全に表示される必要があります。
基本的な考え方は、一度に関数全体を見ることができない場合、関数は複雑すぎて、より基本的な部分に分割する必要があるということです。
このルールは非常に実用的で便利ですが、正式なルールでは、関数内の論理ステップを1つだけ保持する必要があります。関数は基本的なジョブのみを実行します。ジョブをより基本的な部分に分割できる場合は、関数を分割する必要があります。
画面は大きくなり、フォントサイズは小さくなっています。親指のサイズが異なると、親指のルールはうまく機能しません。
簡潔にしてください。関数が複数のことを行う場合、おそらくそれを小さなものに分割することをお勧めします。
メソッドの理想的なコード行数は可変です。基本的に、関数の定義のコンテキスト内で実行する必要があることを行うのに十分なコードのみを記述したいだけです。これは、クラスではなくメソッドにのみ適用される一種の単一責任原則と考えています。
メソッドに多数のロジックがあり、完了するためのいくつかのステップがある場合、メソッドをいくつかの個別のステップに分割することは理にかなっています。これらの各ステップは、必要に応じて新しいメソッドに抽出されます。
「それ以外の場合、1行または2行のコードのみを含む多数の関数があります。」
各メソッドが少ないほど、定義が簡単になり、理解と管理が簡単になります。必要な場合、何百ものメソッドを使用しても問題はありません。また、前述のSRPに従って、メソッドがより小さく管理しやすい部分に分割されている場合、新しいクラスを簡単に抽出できます。
答えはもちろん42です。
重要な注意:機能がSRPに違反することはありません。または、スペインの調査に直面する必要があります。
行の量を減らす方法のヒント:
ここにいくつかの手がかりがあります:
関数の目的と使用法を説明するコメントの作成に問題がある場合は、長すぎます。
関数内のコードのセクションのアクティビティを説明するコメントを書きたい場合、関数は長すぎます。
別の関数からコードを貼り付ける場合、両方とも長すぎます(そのコードを別の関数として抽出します)。
クラスデータメンバーをローカル変数から分離するためのコーディング規則が必要な場合、関数が長すぎ、クラスのメンバーが多すぎます。
関数の読み取り中にメモを取る必要がある場合は、長すぎます。
それぞれが1行または2行の長さの関数の「トーン」を持つことは、必ずしも悪いことではありません。私は、これらの小さな関数が最初に予想したよりもはるかに多く再利用されることを発見しました。