- PR -

空文字を共用する効果

投稿者投稿内容
Samiadon
会議室デビュー日: 2003/10/08
投稿数: 16
お住まい・勤務地: 東京都神戸市浪速区猿猴橋町三条下ル
投稿日時: 2004-05-25 10:26
一緒に開発している方のソースの中に

private static final String EMPTY = "";

を宣言して、全ての""をEMPTYという定数に置き換えているのですが、
これは何らかの効果があるのでしょうか? 支障はないのでしょうか?
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2004-05-25 12:12
支障はないと思いますよ。

その方はなんておっしゃっていましたか ?
また、あなたがこの方法を奇異に感じる理由はどういうものですか ?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-05-25 12:27
一般的にダブルクォーテーションで囲むような文字列をソース中にハードコードするのは良くないとされており、ご指摘のような定数を宣言することが良くあります。

一緒に開発している方に意図を聞いてみてはいかがでしょうか?
第三者に聞くよりも明確な回答が得られるかと存じます。


[ メッセージ編集済み 編集者: インギ 編集日時 2004-05-25 12:29 ]
teto
ベテラン
会議室デビュー日: 2002/07/31
投稿数: 61
投稿日時: 2004-05-25 12:36
支障はないとおもいますが、
みんな守ってるのでしょうか?
守っていないと意味ないですよね。

で、仮に守っているとしてその
メリットはいったい?

どのようなメリットを期待して定数化しているのか
が気になります。
tak3
ベテラン
会議室デビュー日: 2004/04/15
投稿数: 80
お住まい・勤務地: 菜の花・銀杏
投稿日時: 2004-05-25 12:42
マジックナンバーというのをご存知ですか?
それの文字列版ですよね・・・

効果については、見やすくなるとか
EMPTYが””からNULLに変更になった場合に変更箇所を1つにできるとかありますが、
このぐらいの定数なら、わざわざ作る必要無いと個人的に思います。
””が未設定値と仕様で定義されている&仕様変更がほぼ起こらないと仮定しています。

支障は無いといっていいと思います。
(classファイルが大きくなりましたが使用してるコンパイラで違うと思います)
Samiadon
会議室デビュー日: 2003/10/08
投稿数: 16
お住まい・勤務地: 東京都神戸市浪速区猿猴橋町三条下ル
投稿日時: 2004-05-25 13:59
ご回答ありがとうございます。

本人の方にも聞いたのですが、「なんとなく」が回答でした (^^;

初期化するときに既にメモリ上にある値を使うので
何ステップかくらいは早くなるのかなと期待して
いたのですが、どうなのでしょうか?

もう少し勉強してみます。ありがとうございました!
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2004-05-25 16:28
基本的に速くはなりません。
スペース3千個の共有定義なら3k分の読み込み時間が高速化される可能性がありますが・・・
(↑これは勘違いでした)
ハードコードでもクラス変数でもクラスローダが読み込むタイミングは一緒ですね。

しかし、リファクタリング時に大きな効果があります。
private static final String EMPTY = "";

private static final String EMPTY = Hoge.EMPTY;
とか
public static final String EMPTY = "";
その他
クラスの分割とかとか、クラス間のリレーションが大きい場合に意味があります。

たとえ今現在小さいプログラム規模でも、追加構築時に大きな規模になったときに意味があると思います。

[ メッセージ編集済み 編集者: zaxx_MD 編集日時 2004-05-25 18:07 ]
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-05-25 17:28
引用:

zaxx_MDさんの書き込み (2004-05-25 16:28) より:
スペース3千個の共有定義なら3k分の読み込み時間が高速化される可能性がありますが・・・


public static final の Stringやプリミティブ型の定数はコンパイラにインライン展開
されてしまうので、それもないのでは

リファクタリングについても、インライン展開されているので、定数を変更した場合
その定数を参照しているクラスも全て再コンパイルする必要があることに気をつけてください。
なお、この問題は定数ではなく、staticメソッドを使うことで避けることができます。

スキルアップ/キャリアアップ(JOB@IT)