質問の最初の文を読んだ場合、この質問は
マジックナンバーの削除
などの適切な使用に関するものではなく、せいぜいひどい愚かな愚かな一貫性に関するものであることは非常に明白です。これはこの答えが対処するものです
常識はあなたにそれを伝えるconst char UPPER_CASE_A = 'A';
か、const char A = 'A'
お使いのシステムにメンテナンスや複雑さが、何も追加しません。const char STATUS_CODE.ARRIVED = 'A'
別のケースです。
定数は、実行時には不変なものを表すものと想定されていますが、将来コンパイル時に変更する必要がある場合があります。いつconst char A =
以外に正しく等しくなるのでしょうA
か?
public static final char COLON = ':'
Javaコードで見た場合、それを書いた人を見つけてキーボードを壊してください。あなたCOLON
からの表現がこれまでに変更された:
場合、メンテナンスの悪夢が生じます。
難読化:
誰かがそれをCOLON = '-'
使用している-
場所でどこでも代わりにそれを必要とするためにそれを変更するとどうなりますか?基本的assertThat(':' == COLON)
にすべての単一のconst
参照に対して、それらが変更されないことを確認するように言う単体テストを書くつもりですか?テストを変更したときに誰かにテストを修正してもらうだけですか?
誰かがそれpublic static final String EMPTY_STRING = "";
が有用で有益であると実際に主張する場合、あなたは彼らの知識を修飾し、他のすべてについてそれらを安全に無視します。
名前付きバージョンですべての印刷可能な文字を使用できるようにすることは、誰がそれを行ったとしても、監視なしでコードを書く資格がないことを示すだけです。
凝集:
また、人工的に凝集力を低下させます。なぜなら、それを使用し、関連しているものから物を遠ざけるからです。
コンピュータプログラミングでは、結合とは、モジュールの要素がどの程度一緒に属しているかを指します。したがって、凝集度は、特定のモジュール内の機能の断片間の関係の強さを測定します。たとえば、高度に凝集したシステムでは、機能は強く関連しています。
カップリング:
また、関係のない多くのクラスも一緒に結合されます。それらはすべて、実際に実行する内容に実際には関係のないファイルを参照するためです。
密結合とは、クラスのグループが互いに強く依存している場合です。このシナリオは、クラスが多くの責任を引き受ける場合、または1つの懸念が独自のクラスを持つのではなく、多くのクラスに広がっている場合に発生します。
あなたが使用した場合より良い名前のようなDELIMITER = ','
名前が総称で、何のセマンティックを運ばないので、あなたはまだ、同じ問題を抱えているだろう。値を再割り当てすることは、リテラルを検索して置換することよりも、影響分析を行うのに役立ちます','
。いくつかのコードはそれを使用し、,
他のコードは使用する必要がありますが、;
今は必要ですか?それでも、すべての使用を手動で確認して変更する必要があります。
野生で:
私は最近、1,000,000+ LOC
18歳のアプリケーションをリファクタリングしました。のようなものがありましたpublic static final COMMA = SPACE + "," + SPACE;
。それは、" , "
それが必要な場所を単にインライン化するよりも良い方法ではありません。
読みやすさを議論したい場合は、whitespace
文字を表示できるようにIDEを構成することを学ぶ必要があります。これは、エントロピーをシステムに導入する非常に怠zyな理由です。
また、複数のパッケージおよびクラスの,
単語のスペルミスを複数回定義していたCOMMA
。コード内で混在するすべてのバリエーションへの参照。完全に無関係なものを壊すことなく、何かを修正しようとすることは悪夢にほかなりません。
アルファベットと同じ、複数のがありましたUPPER_CASE_A
、A
、UPPER_A
、A_UPPER
ほとんどの時間に等しいだったことA
が、いくつかのケースではありませんでした。ほとんどすべての文字についてですが、すべての文字についてではありません。
そして、編集履歴から、これらの単一のものが18年間にわたって編集または変更されたようには見えませんでした、今明らかな理由のために、追跡できないものがあまりにも多くの方法で壊れてしまうため、新しい変数同じ理由で変更できない同じものを指す名前。
健全な現実では、このプラクティスは何もせずに最大エントロピーから始めると主張することはできません。
私はこの混乱をすべてリファクタリングし、すべてのトートロジーをインライン化し、新しい大学の採用は、これらのconst
参照が実際に指し示していた複数のレベルの間接参照を追いかける必要がないため、はるかに生産的でしたvs含まれるもの。