クリーンアップコードコア(クリーンコード1個、意味のある名前2個)
1.不良コード😒
何が悪いコードですか?
パフォーマンスの悪いコード
不要な演算を伴うコードは、改善の余地があります.
ファジイコード
理解しにくいコード、ネーミング、コンテンツの異なるコード
繰り返しコード
似たような共通コードですが、コードを繰り返すとエラーが発生します.
どうしてコードが悪いの?
ガラス窓の法則
壊れたコードは割れたガラス窓のように、壊れたコードが絶えず発生します.
生産性が低い
悪いコードは、チームの生産性を低下させます.技術負債を製造し、修正をさらに困難にする.
新しいシステムを構築します。
既存のシステムの維持と代替のために新しいシステムを開発することは現実的に非常に困難である.
スケジュールが迫っているからです。
必ず一定の時間内に新しい機能を完成させなければならない.(ただし...悪いコードは生産性を低下させるため、かえって時間の手配ができません.)
影響範囲が広い。
思ったより影響範囲が広いので、別の部分に触れるのが怖いのですが...技術扇子はダーツのように私たちの元に戻ります.
2.クリーニングコード😊
クリーンコードとは?
1.性能の良いコード
2.意味が明確なコード=可読性の良いコード
3.重複コードの消去
専門家別のクリーンコードとは?
ビアネストロ(C++創業者)
私は優雅で効率的なコードが好きです.
論理が簡単で、バグが隠せない.
依存性を最小限に抑えてこそ、メンテナンスが容易になります.
誤りは明確な策略に基づいて徹底的に処理しなければならない.
最適なパフォーマンスを維持してこそ、原則のない最適化が可能になります.
コードを破壊する誘惑に陥ることはありません.
きれいなコードは一つのことをします.
Gradi Booch(オブジェクト向けの対価)
きれいなコードは簡単で直接的です.
きれいなコードはよく書かれた文章のように読めます.
きれいなコードは設計者の意図を隠さない.
逆に明快な抽象と単純な制御文に満ちている.
3.意味のある名前をつける
意味のはっきりした名前をつける
悪い状況.👎
int a;
String b;
System.out.printf("User Requested %s. count = %d", b, a);
よいケース👍
class SalesItem {
ItemCode code;
String name;
int count;
}
// ..
SalesItem selectedItem = salesItemRepository.getItemByCode(purchaseRequest.getItemCode());
System.out.printf("User Requested %s. count = %d", selectedItem.getName(), selectedItem.getCount());
無効リングのi,j,k
forEach文の使用
for (String message : messages) {
// ..
}
ランダを使う
messages.stream().forEach(
message -> // ..
)
i,j,kではなく脈絡に合致する名前がある。
i, j -> row, col/width, height
i, j, k -> row, col, depth
統一された単語を使う
Member / Customer / User
Service / Manager
Repository / Dao
説明:
クリーンコードとは?
1.性能の良いコード
2.意味が明確なコード=可読性の良いコード
3.重複コードの消去
専門家別のクリーンコードとは?
ビアネストロ(C++創業者)
私は優雅で効率的なコードが好きです.
論理が簡単で、バグが隠せない.
依存性を最小限に抑えてこそ、メンテナンスが容易になります.
誤りは明確な策略に基づいて徹底的に処理しなければならない.
最適なパフォーマンスを維持してこそ、原則のない最適化が可能になります.
コードを破壊する誘惑に陥ることはありません.
きれいなコードは一つのことをします.
Gradi Booch(オブジェクト向けの対価)
きれいなコードは簡単で直接的です.
きれいなコードはよく書かれた文章のように読めます.
きれいなコードは設計者の意図を隠さない.
逆に明快な抽象と単純な制御文に満ちている.
3.意味のある名前をつける
意味のはっきりした名前をつける
悪い状況.👎
int a;
String b;
System.out.printf("User Requested %s. count = %d", b, a);
よいケース👍
class SalesItem {
ItemCode code;
String name;
int count;
}
// ..
SalesItem selectedItem = salesItemRepository.getItemByCode(purchaseRequest.getItemCode());
System.out.printf("User Requested %s. count = %d", selectedItem.getName(), selectedItem.getCount());
無効リングのi,j,k
forEach文の使用
for (String message : messages) {
// ..
}
ランダを使う
messages.stream().forEach(
message -> // ..
)
i,j,kではなく脈絡に合致する名前がある。
i, j -> row, col/width, height
i, j, k -> row, col, depth
統一された単語を使う
Member / Customer / User
Service / Manager
Repository / Dao
説明:
int a;
String b;
System.out.printf("User Requested %s. count = %d", b, a);
class SalesItem {
ItemCode code;
String name;
int count;
}
// ..
SalesItem selectedItem = salesItemRepository.getItemByCode(purchaseRequest.getItemCode());
System.out.printf("User Requested %s. count = %d", selectedItem.getName(), selectedItem.getCount());
for (String message : messages) {
// ..
}
messages.stream().forEach(
message -> // ..
)
Member / Customer / User
Service / Manager
Repository / Dao
変数名にタイプを入れない
データ構造
リスト、Mapの資料構造であれば、表現できる名前がないので明示しても大丈夫です.
interface
インタフェースであれば,以前は名前の前にIでインタフェースを表していたが,明示しないほうがよい.
インプリメンテーションボディ
実装インタフェースの具体的なクラスはxxxxImplと命名することが望ましい.
4. Google Java Naming Guide
Package Naming Guide
すべての人は小文字で、標準点を下回ることを禁止します!
Class Naming Guide
キャラメルボックスとして作成
Method Naming Guide
方法は動詞、動詞フレーズ
リファレンス
これらの情報はゼロベースラインクリーニングコード毎月1冊を聞いた後に整理された.
Reference
この問題について(クリーンアップコードコア(クリーンコード1個、意味のある名前2個)), 我々は、より多くの情報をここで見つけました
https://velog.io/@coconenne/클린코드-1장-깨끗한-코드
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
これらの情報はゼロベースラインクリーニングコード毎月1冊を聞いた後に整理された.
Reference
この問題について(クリーンアップコードコア(クリーンコード1個、意味のある名前2個)), 我々は、より多くの情報をここで見つけました https://velog.io/@coconenne/클린코드-1장-깨끗한-코드テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol