JavaRush /Java Blog /Random-JA /ロバート・マーティン、クリーン・コード。開発者向けの「カンフー コード」に関する書籍のレビュー
Artem Murk
レベル 35
Днепр

ロバート・マーティン、クリーン・コード。開発者向けの「カンフー コード」に関する書籍のレビュー

Random-JA グループに公開済み
こんにちはジャラシュビテス! この記事は、ロバート・マーティン著『Clean Code』の書評です。コードを改善および最適化する方法を一緒に検討します。最後には、小さいながらも興味深いタスクがあなたを待っています。
ロバート・マーティン著「クリーン・コード」。 開発者向けの「カンフー コード」に関する書籍のレビュー - 1
毎日、コード エディターを開くと、多くのクラス、関数、変数が表示されます。最善の選択肢は、これが最初から書かれたコードであり、一度書かれたもので、行数が少なく、単独で作業しており、編集がなく、顧客からのさらなるサポートがない場合です。しかし!実践が示すように、はい、あなた自身もこれが起こらないことを理解していると思います。基本的に、何らかの方法でチームのメンバーと対話し、「ヒンドゥー」コードを保守し、製品を数百万行に解析する必要があります。トレーニング仲間から次のような答えをよく聞きました。「このコードは私が書いたもので、誰にも見せるつもりはありません。」しかし、ヘルプでそのようなコードに関するヘルプのリクエストを見ると、非常に長い時間がかかります。掘り下げて理解するのに時間がかかる(場合によっては非常に長い) 相手は私に何を伝えたかったのか、「消してまた書き直す」と言いたくなるくらい!あなたを助けようとしてくれる人々の時間とエネルギーに感謝し、正しく書きましょう。方法がわからなくても、学ぶのに遅すぎるということはありません。Robert Martin の本は、Java の例が多数含まれているという点で、この形式の本の中で際立っています。これは私のちょっとマニアックな発言かもしれませんが、OOP スタイル、つまりパートとセクションの書き方で書かれています。理解しやすく読みやすいので、外出先や夜寝る前に簡単に読むことができます。クリーンコードは 3 つの部分に分かれています。最初の部分では、本の理論を読み、デザインパターンとマナーのルールについて学びます。2 番目の部分では、リファクタリングと記述の練習を促します。3 番目の部分は、例にあるコードの「匂い」の最終的な要約です。さて、著者は主に Java コアの知識が必要となる多くのトピックに触れましたが、JUnit 単体テスト、Log4j ロギング、設計における最も単純なパターンの知識に特化したセクションもあります (ただし、上で述べたように、それらの多くは、理解できないものはすべて Google で検索でき、JavaRush コースで分析できます)。この本のすべての章は相互に関連しているわけではないので、好きな章から読み始めることができます。この本から私が拾った主なアイデアを簡単にまとめます。これらの声明についてご自身のビジョンを共有していただければ、コメントをいただければ幸いです。

1. コメント == 悪。

ほとんどの場合、コメントは悪いコードを隠蔽するための杖になります。また、場合によっては、継続的なコードのリファクタリングがある場合、メソッドや変数の目的についても嘘をつきます。

2. コメント化されたコード、デッドコード。

アプリケーション内にこれらのコードを残すことはゴミと同じです。未使用のコードは時間の経過とともに蓄積され、アプリケーションのクリーンさを妨げるため、そのようなモジュールのコードを時々確認してください。

3. メソッド、クラス、変数の見出し。

このトピックについては、別の記事で説明する価値があります。怠惰にならずに、その目的がわかるような名前を書きましょう。タイトルのスペルの標準をいくつか学びましょう。このトピックは詳細な学習に「必須」です。

4. 各メソッドと変数はクラス階層内でそれぞれの場所を持ちます。

通常、クラスには変数とメソッド (静的および非静的)、コンストラクター、ネストされた内部クラス、および列挙型を含めることができます。つまり、情報が多く、クラス内での全員の位置を決める必要があるのです。Java コア クラスを見ると、構造が明確に構造化されていることがわかります。各パーツが適切な位置にあることがわかります。もちろん、プロジェクトでは、プロジェクト内で変更できますが、各クラスでは変更できません。私自身、次の構造構造を定義しました。クラスの先頭に静的変数があり、次にオブジェクト変数 + Enum (存在する場合) が続きます。変数の後に、クラス コンストラクターを定義します。次に、クラスを操作するためのメソッドを作成します。メソッドの後にゲッターとセッターを書きます。そして最後に内部クラスがあります。私の構造を使用することも、コメントに独自の構造を作成することもできます。

5. メソッドの抽象化のレベル。

私にとって、これは第 1 の発見でした。各メソッドには、1 つの抽象レベルのみの演算子が含まれています。マルチレベルの操作を混合しないでください。

6. エラー処理。

チェック済み例外とチェックなし例外、どちらをプロジェクトで使用するのが良いですか (どう思いますか?、コメントを書いてください)? 私はチェック済みの例外を支持していますが、この本はチェックされていない例外を外側から見るのに役立ちます。実際、特に例外が一度に複数の層を「貫通」することを考慮すると、チェックされていない例外によってメソッドのシグネチャが損なわれることはありません。ほんの小さな変更の不便さにより、それを捕捉する前にメソッド チェーン全体の再定義が発生し、多くの場合、開発にとって非常に不便になります。

7. コードのフォーマット。

適切にフォーマットされたコードは、明確であるだけでなく、可読性も高くなります。括弧とその中のアクションについてはすぐに理解できます。if、else 構造の条件の例を使用すると、すべてを 1 行で記述するべきではなく、長いチェーンを移動することをお勧めします。

8. 条件内の否定。

状況に応じて否定を避けるようにしてください。これはむしろ心理的要因です。私たちの脳は否定をうまく認識しません。そして、その通りです。表情が気づかれない前に。たとえば、 if (!condition.isTrue) を否定するのはメソッドを書き直す方が良いため、このように (condition.isFalse) のようにはるかに簡単になります。

9. 関数は 1 つの操作を実行する必要があります。

メソッドで多くの操作を実行する場合は、それらを単一操作のメソッドに分割します。これらのメソッドはサポートもテストも非常に簡単で、必要に応じて置き換えたり削除したりすることができます。

10. 同じことを繰り返さないでください。

DRY コードを繰り返さないでください (同じことを繰り返さないでください)。これは、コードを大幅に削減する基本的なルールの 1 つであるため、覚えておいてください。繰り返されるコード部分をすべて別の関数に入れるようにしてください。もちろん、DRY、KISS(Keep it simple Stupid)、SOLID、YAGNI についてはもっとたくさん話すことができます。これらの用語は理解と設計に不可欠です。この記事は「Clean Code」という本のレビューに特化しているため、それらについては別の記事にする価値があります。おそらく、もう一度書くことになるでしょう。
ロバート・マーティン著「クリーン・コード」。 開発者向けの「カンフー コード」に関する本のレビュー - 2
約束どおり、あなたにとっては小さくて簡単な仕事です。プログラムは、指定されたデータに基づいて肥満指数を計算する必要があります。コード内のエラーと修正の数をコメントに書き込みます。追伸 正しく使用されていれば、コードは機能し、その機能を実行します。
//Weight in kg.
//Height in metres.
public class sample {
    public static void main (String[] args) {
        humanIMB humanIMB = new humanIMB(80,1.52);
        System.out.println(humanIMB.Result());
    }
}
class humanIMB {
    public double W; //Weight Human
    public double H; // Height Human
    private static double imb;
    public humanIMB(double w, double h) {
        W = w;
        H = h;
        imb = W / (H * H);
    }
    public double takeW() {
        return W;
    }
    public void putW(double w) {
        W = w;
        imb = W / (H * H);
    }
    public double takeH() {
        return H;
    }
    public void putH(double h) {
        H = h;
        imb = W / (H * H);
    }
    public static double takeImt() {
        return imb;
    }
    public static String Result() {
        String  string = null;
        if (imb >=18.5 & imb <25) {
            string ="Норма, ты в форме!";
        }
        if (imb >=25 & imb <30) {
            string ="Предожирение. Эй, поосторожнее с пирожными ";
        }
        if (imb >=30) {
            string ="Ожирение. SCHWEINE! Хватит жрать, иди на треню!";
        }
        if (imb <18.5) {
            string ="Дефицит массы тела. В модели решил переквалифицироваться?";
        }
        return string;
    }
}
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION