[CleanCode]3章関数
小さくしろ!
一つだけやろう!
→関数を作成する理由は、最終的に大きな概念を次の抽象レベルから複数のレベルに分けるためです.
各関数の抽象レベルは1つです!
→根本概念+細部が混同され始めると、細部が割れた窓のように増えます.
上から下への読み取りコード:ルール
スイッチドア
switch (e.type) {
case COMMITSSIONED:
return calculateCommissionedPay(e);
case HOURLY:
return calculateHourlyPay(e);
case SALARIED:
return calculateSalariedPay(e);
default:
throw new InvalidEmployeeType(e.type);
}
上記のコードの問題継承関係のため、非表示にして他のコードには入りません.
public interface EmployeeFactory {
public Employee makeEmployee(EmployeeRecorder r) throws InvalidEmployType;
}
---------------------------------------
public class EmployeeFactoryImpl implements EmployeeFactory {
public Employee makeEmployee(EmployeeRecorder r) throws InvalidEmployType{
// switch문
}
}
叙述的な名前を使う!
関数パラメータ
買収
買収
理解は
パラメータ可変関数
付随効果は発生しないでください。
付随効果は嘘です.
関数の中で一つのことをすると言っているのに、こっそり他のことをしている.
パワーファクタを避ける.
関数でステータスを変更する場合は、関数が属するオブジェクトのステータスを変更する方法を選択します.
コマンドとクエリーを分けて!
関数は、オブジェクトのステータスまたは情報を返します.どちらもできません
// ASIS - 의도가 모호하다. set하는 함수인가? username이 unclebob인지 확인하는 함수인가?
if(set("username", "unclebob")...
// TOBE
if(attributeExists("username")) {
setAttribute("username", "unclebob");
}
エラーコードではなく例外を使用します。
コマンド関数からエラーコードが返され、コマンド/クエリー分離ルールに違反します.
try/catch文は醜い.try/catchブロックを個別の関数として抽出することが望ましい.
public void delete(Page page){
try{
deletePageAndAllReferences(page);
}
catch (Exception e) {
logError(e);
}
}
// try블록 별도 함수로 추출
private void deletePageAndAllReferences(Page page) throws Exception {
deletePage(page);
registry.deleteReference(page.name); // 실제동작함수
configKeys.deleteKey(page.name.makeKey());
}
// catch블록 별도 함수로 추출
private void logError(Exception e){
logger.log(e.getMessage());
}
したがって、
繰り返さないで!
繰り返しは万悪の源である.
AOPとCOPはいくつかの面で冗長性を解消する戦略である.
構造化プログラミング
すべての関数の入口と出口は1つしか存在しません.つまり、ドアが1つしかありません.
関数が小さくなるとreturn、break、continueを複数回使用できますが、関数のサイズにかかわらずgoto文は使用しないほうがいいです.
関数はどう書きますか。
普通の作文とあまり差がない.アイデアを記録する→可読性を整理する.
この過程で、テストケースはいつも合格します.
Reference
この問題について([CleanCode]3章関数), 我々は、より多くの情報をここで見つけました https://velog.io/@agpine12/CleanCode-3장-함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol