CleanCode TIL (2022.02.12)
DAY 21
🔖 今日の読書範囲:Final mission
🤓 本の中で覚えたい内容
任務の総括を完成する.コードの作成者です.読者とコミュニケーションするためにきれいなコードを書く責任があります. コードの作成が容易 繰り返しを減らし、表現力を高め、最初から簡単な抽象→本当の問題を考える 良い名前を取るには時間がかかりますが、良い名前で節約する時間はずっとかかります. 変数が長くなると、かえって検索しやすくなります. 発音しやすい名前を使う→建亜木ダヒムス 禁止きれいな名前は人にとって、クラスはコンパイラにとって です.抽象概念の中で一致する語を選択し、 を堅持する. IDEの自動完了を考慮して、不要な接頭辞をすべて追加しないでください. 関数では、インデントレベルは1セグメントまたは2セグメントを超えてはいけません. (指定した関数名の下で抽象レベルが1のステップのみを実行)、 関数のパラメータが少ないほど良いです. 付随効果は発生しないでください! コマンドとクエリーの分離! のエラーコードではなく、例外を使用します. 平均200行のファイル(500行を超えない)で、大規模なシステム を構築できます.のニュース記事のように書かれています.抽象→詳細、似たような概念は 近くあります.オブジェクトは新しいタイプを追加しやすいが、新しいアクション を追加するのは難しい.データ構造では新しいタイプを追加することは難しいが、新しい動作 を追加することは容易である.優秀な開発者は必ずしも対象に向いているとは限らず、場合によってはプログラムガイドの資料構造も をよく使用する.エラーと比較(不確定)使用例外 の例外を引き起こすtry-catchを完了し、論理 を追加します. Errorパッケージクラスによる依存性の低減 特殊な状況をデフォルト値に戻し、不要なエラー処理(割り込み) を解消する. NULLを返さず、例外または特殊オブジェクト を返します.メソッドを使用してNULLを渡さないでください.新しい例外を投げ出すか、assert文 を使用します.自動化ユニットテストキットの変更が容易→設計とアーキテクチャの整合性を最大限に維持できる 可読性はテストコードにおいて実際のコードよりも重要→Build-Operate-Checkモード テストコードは、実際のコードのように効率的に→テスト環境で実行する必要がないため、 .各概念のassert数を最小限に抑え、 テスト関数は、1つの概念 のみをテストします.テストには、高速、独立、繰り返し可能、自己検証、定期テスト が必要です.類責任の個数は小さい→簡潔な25語程度 は、機能および名称が明確な要素 を区切るための複数の小さな引き出しである.類を分離し、凝集度を高める クラス区分が小さく、 を変更しやすいは、具体的な実施ではなく抽象的に境界 を分離する. SRP、OCP、DIP原則 を遵守
1.1つのみ実行(指定した関数名の下に抽象レベルが1つしかないステップ)
🥲 **Before** HandleConnectには多くの作業があるため、saveConnectとmoveToDashboardを実行するために別々の関数に分離することができます. 論点については,関数外のものを用いることができるかどうか,再検討が必要である.
2.発音しやすい名前を使う
🥲 **Before** の本でgenymdhmsの名前を見て腹を抱えて笑った.でも私にもあります.Two WiiとYi M DJ... 直ちに関数の名前を→generateDate, に変更
3.NULLではなく、例外または特殊なオブジェクトを返します.
🥲 **Before** Poolをオフにできない場合はnullではなく正確なエラーを投げ出すように変更します.
🤔 浮想 まず修正が必要なコード量が不足している.これまでに書かれたコードやrepoの数は多いと思いますが、実際に見るとほとんどのコードがフロントエンドであり、Niko Samの講義に基づいて、すでに小さな関数によく分けられており、例を見つけるのは難しいです. 🔎 n.問題
📝 感想3行ダイジェスト実際には、自分のコードに本の内容を適用して汚れを探すのは難しいです. がクリーンな距離を作ることができるように、スクリプトの作成から始まるコード量 を増やすべきである.保理は本当に を継続するために多くの時間と精力を費やす必要があります.
🔖 今日の読書範囲:Final mission
🤓 本の中で覚えたい内容
任務の総括を完成する.
1.1つのみ実行(指定した関数名の下に抽象レベルが1つしかないステップ)
🥲 **Before**
const handleConnect = () => {
let config = data[dbIdx];
localStorage.setItem("alias", config.alias);
localStorage.setItem("config", JSON.stringify(config));
execPost("/connect", {
config: config,
})
.then((res) => {
console.log(res.data);
if (res.data === "CONNECTED") {
setIsConnected(true);
history.push("/dashboard");
}
})
.catch((err) => {
console.log(err);
});
};
😍 **After**const handleConnect = () => {
let config = data[dbIdx];
saveConnect();
moveToDashboard();
};
const saveConnect = () => {
localStorage.setItem("alias", config.alias);
localStorage.setItem("config", JSON.stringify(config));
}
const moveToDashbaord = () => {
execPost("/connect", {
config: config,
})
.then((res) => {
console.log(res.data);
if (res.data === "CONNECTED") {
setIsConnected(true);
history.push("/dashboard");
}
})
.catch((err) => {
console.log(err);
});
}
2.発音しやすい名前を使う
🥲 **Before**
const toYYYYMMDD = (date) =>
new Date(date - date.getTimezoneOffset() * 60000)
.toISOString()
.split("T")[0];
😍 **After**const generateDate = (date) =>
new Date(date - date.getTimezoneOffset() * 60000)
.toISOString()
.split("T")[0];
3.NULLではなく、例外または特殊なオブジェクトを返します.
🥲 **Before**
function closePool(name) {
if (Object.prototype.hasOwnProperty.apply(POOLS, [name])) {
const pool = POOLS[name];
delete POOLS[name];
if (typeof pool.close === "function") {
return pool.close();
} else {
return null;
}
}
}
😍 **After**
function closePool(name) {
if (Object.prototype.hasOwnProperty.apply(POOLS, [name])) {
const pool = POOLS[name];
delete POOLS[name];
if (typeof pool.close === "function") {
return pool.close();
} else {
throw Error("Could not close pool")
}
}
}
🤔 浮想
Reference
この問題について(CleanCode TIL (2022.02.12)), 我々は、より多くの情報をここで見つけました https://velog.io/@henry/CleanCode-TIL-2022.02.12テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol