「コードをきれいにする方法」を読んだ後の考え

序文

多くの場合、古いコードを見て、それは信じられないほどだと思います。どうしてこんなに悪いコードがあるのでしょうか。誰がこんなに厄介なコードを書いたのかを考えると(自分自身を見つけて驚かれることがあります)、それからしかできません。弾丸をかじってこれらのコードの意味を読んでから、そのうちの1つを注意深く変更して作業を完了させてから、送信してください。

このように、コードは提出ごとにゆっくりと減衰し、最終的には悪臭を放ち、潜在的な脆弱性や危機を引き起こす可能性さえあります(プロジェクトコードが本当に保守できないために失敗する企業もあると聞いています。アップ)。

したがって、コードの取り扱いは非常に重要です。多くの人は、コードを「機能」させてから次のタスクを開始するだけで十分だと考えています。実際、コードを書くことは、記事やレポートなどを書くことと非常に似ています。最初に、表現したいことを書き、次に、必要なことを達成するまでゆっくりと検討し、熟考します。

前書き

最も単純なコードシーケンス、変数の名前付けの最適化から、モード、システムの最適化、およびその他の側面までの本「クリーンコード」は、コードがより簡潔で読みやすいように、いくつかの提案と解決策を提示します。前の章では、著者は作業プロセスでのコードの整理と最適化の経験を完全にリストしています。これは、この本の全体的な要約と見なすことができます。前の章を読みたくない場合は、第17章を参照して直接情報を入手できます。ポイント、それはあまり詳細ではありません。さらに、最初の2つの章では、完全なプロジェクトコードを段階的に実用的な最適化プロセスを取得し、作成者の思考プロセス全体を分解します。実際、これに従うことは非常に興味深いことであり、前の章で作成者が言ったことのいくつかをよりよく理解できます。

コードの最適化

次に、私にとってより刺激的で気分が良くなると思ういくつかのポイントを見ていきましょう。

名前

1つ目はネーミングです。良い名前は非常に重要です。私たちが自分の名前を選ぶときに、両親が頭を壊したり、お金を使って素敵でわかりやすい名前を付けたいと思う理由を考えてください。同様に、変数名とメソッド名、クラス名、ファイル名など、取得方法についてはもっと時間をかけて考えてください。これが何を意味するのかが一目でわかるのが一番です。

private BroadcastReceiver mBroadcastReceiver;
private PublicNotifyReceiver mReceiver

これらの2つのように、コードを見ると、ハァッ?これはどのようなブロードキャストであるか、定義された場所を見るだけで、受信するように登録されているブロードキャストを確認できます。これら2つの変数の名前は実際には無意味であり、何をしているのかはわかりません。使用する!交換appSettingChangeBroadcastReceiverたらdialogPushBroadcastReceiver名前を見るだけで、1つ目は「アプリケーション設定変更」のブロードキャストであり、2つ目は「ポップアッププッシュ監視」のブロードキャストであることがわかりますか?コードを読むときの混乱を避けるために、適切な名前を選択してください。したがって、名前に正確な意味を持たせます。
ネーミングをもう一度見てみましょうgetHour(Calendar calendar)。これはツールクラスのメソッドですが、その目的がわかりません。最初は、このカレンダーの時間フィールドを取得することだと思い、現在の時刻を取得することを考えました。実際、 、そのHH:mmようなフォーマットされた時間文字列を取得しましたそのため、その名前はその名前と同じではありません。一方で、内部で何が行われているのかを知るためにクリックする必要があります。他方、そのような機能が存在する場合でも、習慣的に使用したい場合は、その結果、この関数のメソッドは、メソッド名からそのようなメソッドがないので、新しいメソッドを作成しましたが、これは重複していませんか?したがって、名前を意味のあるものにし、同じにします。名前とその機能は一貫しています。

コメント

コードを書く過程で、たくさんのコメントを書きますが、コメントを書くときは、さりげなく注意することだけでなく、注意すべきことがたくさんあります。

  • 必要な場合にのみコメントする

どこにでもコメントを書く必要はありません。もっと複雑な場所や特別な機能を持っている場所にコメントを書く理由を示すだけです。

  • ナンセンスを書かないでください
    /**
     * 日期格式 -- yyyy年
     */
    public static final String DATE_FORMAT_Y = "yyyy年";
    /**
     * 日期格式 -- yyyy年MM月
     */
    public static final String DATE_FORMAT_Y_M = "yyyy年MM月";

たとえば、それが何であるかが一目でわかりますが、コメントを書くためになぜこれほど多くの行を無駄にするのでしょうか。このエネルギーで、命名についてよりよく考えることができます。多くの変数とメソッドに実際に直接名前を付けて、読者に何をしているのかを伝えることができますすべてにコメントを書く必要はありません

  • メモの形式
/**
 * <b>Project</b> <i>almanac</i><br>
 * <b>Create Date</b> <i>2014/10/18</i><br>
 * <b>Author</b> <i>***</i><br>
 * <b>Email</b> <i>***@mmclick.com</i><br>
 * <b>Update Date</b> <i>2014/10/18 14:49</i><br>
 * <b>Last Update</b> <i>***</i><br>
 * <b>Description</b> <i>
 * <p/>与时间有关的工具类
 * </i>
 */
public class TimeUtils {
...
}

クラス名に関するこのコメントを見てください、それは本当に特に不快に見えます!まず、Javaコードにhtml言語のコメントを混ぜます。ドキュメントをエクスポートするときに非常に標準化されると言うかもしれませんが、実際には、ドキュメントはあまりエクスポートされず、ほとんどの場合、ideまたはテキストエディタを使用します。このコードを読むには、さまざまなタグが混在しているため、読むのに非常に不便です。この形式は単純に頭痛の種です。
第二に、コメントはすべて役に立たないものです。現在のバージョン管理ツールでは、クラスの作成者、作成時間、更新時間など、多くの情報を記録できます。これはコメントではまったく不要です。
第三に、説明は冗長です。一般的にUtilsで終わるものを見て、これがツールクラスTimeUtils、つまり時間関連のツールクラスであることを示していることを知っています。それでは、上記の説明の役割は何ですか?

繰り返しコードを書かないでください

繰り返しコードを書かない、繰り返しコードを書かない、繰り返しコードを書かない、複数の場所で使用されるいくつかのコードを抽出してカプセル化する、これは言うまでもありませんが、非常にシンプルで非常に重要です。

関数

1つ目は機能コード量です。通常、エディタの1画面に表示される機能は、通常30〜40行程度です。機能を短く簡潔にするために、1画面内で終了するように機能を制御する必要があります。
単一の責任関数に1つのことだけを実行させ、1つの関数に多くの関数を混在させないように最善を尽くす必要があります。多くのことを実行する場合は、関数に適切な名前を付ける必要があります。関数の1つにちなんで関数全体に名前を付けることはできません。
パラメータが多すぎないようにしてくださいパラメータの最も理想的な数はゼロであり、次に1、次に2、3が続くので可能な限り避ける必要があります。3つ以上のパラメーターを使用するのに十分な特別な理由があります。
機能の順序コードを読むときは上から下に行くことが多いので、関数を書くときは、最初に表示される関数にも注意を払い、関数内で他の関数を呼び出してから、次のようにコードを見てください。飛び回る必要はありません、私は誰ですか、私はどこにいますか、どこに戻りたいですか...
たとえば、アクティビティのonCreateメソッドでは、最初にその中で何が行われているかを一目で確認でき、次に実行の順序を1ステップずつ実行できます。 1つのステップを見下ろすと、プロセス全体のどこかにジャンプする必要はなく、ページに入った後の私の処理フローがどのようなものかを知ることができます。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.alc_activity_home_layout);
        linghitSecurityCheck();
        initView();
        initWork();
        addDialogs();
        initAfterUiShow();
        handleDelayTask();
    }

機能シーケンス(Ctrl + F12を押して表示)
WX20200111-214240@2x.png

設計

コード構造全体のデザインは、デザインがどれほど複雑でなければならないかを示していません。重要なのは、使いやすく、読みやすいことです。しかし、これも経験の蓄積に基づいており、ゆっくり書くことができます。他の人が書いたより良い構造のいくつかをもっと見て、最初にそれらをコピーしてから、ゆっくりとそれらを変更して、徐々にあなたが望むものにします。

最後に書く

私は特に本の冒頭の引用が好きです:「あなたが来たときよりもキャンプをきれいにしてください!」

チェックインするたびに、チェックアウトするときよりもコードがクリーンであれば、コードは破損しません。クリーンアップに必ずしも多くの労力を要するわけではありません。変数名を変更し、少し長すぎる関数を分割し、重複するコードを少し削除し、ネストされたifステートメントをクリーンアップするだけです。

すべてのメンバーは、コードが移動されるたびにこれを実行できるため、コードが腐敗することはありません。

最後に、「コードのクリーンさ」という本を読んでください〜

おすすめ

転載: blog.csdn.net/lizebin_bin/article/details/103941261