[クリアコード]3章関数


関数の作り方を学ぶ.
小さくする
関数を作成する最初のルールは「小」で、2番目のルールも「小」です.
ブロックとインデント
言い換えれば、文elseゲートなどのブロックが1行であるはずです.
これにより,外部を囲む関数が小さくなり,コードもより理解しやすくなる.
一つだけやろう
関数は一つのことをしなければならない.そのことをしなければならない.そのことだけをしなければならない.
抽象レベルは1つだけ実行されます.
1つの仕事をする関数だけでは、自然に複数の部分に分けるのは難しい.
各関数の抽象レベルは1つしかありません.
関数を1つだけ持つ場合は、関数内のすべての文の抽象レベルが同じである必要があります.
抽象化の度合いを混ぜ合わせると、特定の表現が根本的な概念なのか細部なのかが混同されます.
降格規則
コードは上から下まで物語のように読んだほうがいいです.
上から下へプログラムを読み込み(自然に脈絡を読み取る)、関数抽象レベルを一度に1レベル下げます.
これは容易ではないが重要なルールだ.
記述名の使用
各インスタンスがコードを読むときに予想される機能を実行できる場合、クリーンなコードと呼ぶことができます.
良い名前の価値をいくら強調しても過言ではありません.
名前が長くても大丈夫です.長くて叙述的な名前は短くて難しい名前よりいいです.
また、一貫性を保つ.
関数パラメータ
因数を導入すると説明が難しい.
/* 함수 이름과 인수 사이에 추상화 수준이 다를뿐더러, 
현 시점에서 중요하지 않은 세부사항(PageContent)를 알아야 한다. */
includeSetupPageInto(new PageContent)

// 이해하기 더 쉽다.
includeSetupPage()
関数の理想的な因数はゼロです.3つからはなるべく避けたほうがいいです.
入力係数がないほうがいいです.次に入力係数が1つしかありません.
フラグパラメータ
すなわち,フラグは関数が複数のタスクを一度に処理することである.nope!
にこうかんすう
プログラムを作成する際には、避けられない2つの関数が必要になる場合がありますが、可能であれば、できるだけ単一の関数に変換する必要があります.
引数オブジェクト
2~3個の引数が必要な場合は、一部を独立したクラス変数として宣言できます.
Circle makeCircle(double x, double y, double radius);

// 단순 눈속임이 아닌 개념을 표현하게 된다.
Circle makeCircle(Point center, double radius);
パワーファクタ
引数は関数入力として解釈されます.自己変数を出力として使用しないでください.(オブジェクト向け言語の出力変数thisを使用できます)
appendFooter(report);	// 출력 인수를 피하자
report.appendFooter();	// 함수 내에서 this를 사용해서 객체 상태 변경
動詞とキーワード
関数と引数で動詞/名詞対を構成すると分かりやすい.
もう1つの方法は、関数名にキーワード(引数名)を入れることです.
writeField(name)	// 동사/명사 쌍으로 곧바로 이해됨.

assertEquals(expected, actual)	// 인수의 순서가 확실치 않다.
assertExpectedEqualsActual(expected, actual)	// 키워드 추가함으로써 순서 명시됨
付随効果を生じない
一つだけやると約束して、ほかのことをさせないでください.
コマンドとクエリーを分ける
関数は、アクションを実行するか、アクションに答えるしかありません.
両者を兼ねて、コードを読むと混乱します.
エラー・コードではなく例外の使用
エラーコードではなく例外(try/catch)を使用すると、エラー処理コードが元のコードから分離され、コードがきれいになります.
また,try/catchブロックを個別の関数として抽出するとより簡潔になる.(正常動作とエラー処理動作を分離)
繰り返さないで
繰り返すと、重なった場所はすべて修理しなければなりません.重複をinclude法で除去する.
構造化プログラミング
関数には、breakまたはcontinueをループで使用できない戻り文が必要です.
gotoは絶対にだめだ.
関数はどう書きますか.
下書きは不器用で雑然としているが、自由に読めるように修正しなければならない.
絶えず修正しますが、常に単位テスト例に合格します.
n/a.結論
関数をうまく作る技術を身につけた.
より豊かで表現力のあるコードを書きましょう.
Reference
清潔コード:エイズの日のソフトウェアの達人の精神-ロバート・マーティンの知音