web-dev-qa-db-ja.com

変数名の記事と文字列のハードコーディング

著者による再編集:いいえ、これは2つの質問ではありません。これは、2つの異なるポイントを含むコードレビューの質問に関する1つの質問です。私の質問は編集しないでください。

変数に名前を付ける場合、変数名に記事(a、an、the)を使用すること(たとえば、theBookとbookのどちらか、またはparseTheStringとparseString)の両方が関係します。

文字列をハードコーディングする場合、3つの側面は、すべての文字列を別のファイル(クラスまたはインターフェイス)の定数(public static final)に入れるか、それらすべてを同じファイル(private static final)に入れるか、または使用しないかです。文字列の定数です。 (例:new Button( "Click Me")とnew Button(BUTTON_LABEL_CLICK))。ハンガリー語の表記問題についてもかなり議論していますが、他の質問でここで議論されているのを見ました。

非常に長い間、記事を変数名で使用しないこと(値を追加せずに視覚的な混乱を追加すること)と、ソースコード全体にハードコードされた文字列が散りばめられていないこと(潜在的なメンテナンスの悪夢と国際化にとって非常に悪い) 。現在、これらの違反が確認され始めており、誰かがこれらを欠陥としてマークするか、少なくとも注意が必要な場合、開発者は本当に驚いているようです。マネージャーはどちらにしてもかまわないと言っていて、これらの点は私たちの会社のコーディング基準にはありません。

3
Iceberg

変数名の記事

ほとんどの場合、値がほとんどまたはまったく追加されませんが、コードを長く読めるようになります。

通常、関数のフローで「a」と「the」の区別が必要になることはほとんどないので、記事を使用しても意味がありません。

それは正式なプログラミング言語であり、自然言語のように正確に読まなくても問題ありません。実際には、おそらくこの方法の方が優れています。自然言語に関して必ずしもすべてが優れているわけではありません。

ただし、記事を使用することで読みやすさが向上する場合もあります。たとえば、boolean isA(Object o, Class<?> cl)のようなメソッドシグネチャとの「is a」関係のチェッカーを実装する場合などです。 (私はこれを良い考えと主張していません)

ハードコードされた文字列

それらを再利用するかどうか、およびその再利用がセマンティクスによって駆動され(文字列が異なる場所で同じコンテンツを持っているという事実だけでなく)、複数のクラスまたはサブシステムに広がるかどうかによって異なります。

その程度まで、私は通常これらのルールを使用します:

  1. 同じ文字列が複数あり、それが同じ意味で複数のクラスを意味する場合は、インターフェイスで定数に抽出します。

  2. 1つのクラス内で同じ文字列が複数回あり、そのクラス内で同じ意味を持つ場合は、クラス内の定数に抽出します。

  3. Asingの繰り返しが数回しかない場合、またはそれらがたまたま同じであるが将来常にあることが保証されていない場合は、インライン化します。

  4. 上記のいずれかがメンテナンスを困難にする場合は、ルール1から3までをねじ込み、最適な方法で作業してください。

もちろん、定数の名前によって、コードがそれが保持する文字列と同じように意味的に有効になることを確認してください。これは、文字列ではない他のものにも適用されます(たとえば、述語など)。

10
haylem

文字列をハードコーディングする場合、3つの側面は、すべての文字列を別のファイル(クラスまたはインターフェイス)の定数(public static final)に入れるか、それらすべてを同じファイル(private static final)に入れるか、または使用しないかです。文字列の定数です。 (例:new Button( "Click Me")とnew Button(BUTTON_LABEL_CLICK))。ハンガリー語の表記問題についてもかなり議論していますが、他の質問でここで議論されているのを見ました。

高品質のユーザーエクスペリエンスが必要な場合は、UIデザイナーがユーザーに表示するもの(ボタンラベル、エラーメッセージなど)を確認する必要があります。私の経験では、開発者がテキストをハードコーディングしているとき、それは起こりません。開発者はできる限り最善を尽くしますが、結果はランダムよりも優れたメッセージとラベルのセットです。

2
kevin cline

Apple 記事を使用 -一貫性がない-ObjCコード内。コードの読みやすさ、または変数名の説明にnothingを追加します。

- (id)viewWithTag:(NSInteger)aTag;
- (id)initWithFrame:(NSRect)frameRect mode:(int)aMode cellClass:(Class)factoryId numberOfRows:(int)rowsHigh numberOfColumns:(int)colsWide;

aTagaModeframeRectに注意してください。

準規格は嫌いで使わない。コードをモロニックに聞こえます。

1
Ant