[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: ローカル変数とフィールド




# つまんないことでって思わずに:)もうほとんどヨタ話
In article <37FF6745.4C2FF559@xxxxxxxxxx>
Toru TAKAHASHI wrote:
>> The Java letters include uppercase and lowercase ASCII Latin letters
>>  A-Z (\u0041-\u005a), and a-z (\u0061-\u007a), and, for historical r
>> easons, the ASCII underscore (_, or \u005f) and dollar sign ($, or \
>> u0024). The $ character should be used only in mechanically generate
>> d Java code or, rarely, to access preexisting names on legacy system
>> s.
>> 
>> って書いてました.'$'は自動生成された識別子に使われるべきと書いていま
>> すが、'_'については規定されてませんよね.
>> プリプロセッサ云々というあたりはCの慣習から来た解釈なのでしょうね.
>> # Cではプログラマが'_'を識別子(の先頭/末尾)に使用してはいけないとい
>> # う規定はありましたっけ?MSのCは独自拡張の関数先頭などに_を付けてい
>> # るようですが...
>プリプロセッサと呼んでもよいか?ですが、CORBAを使うとIDLから生成される
>クラスが、_SomeInterfaceImplBase のように'_'がついてます。とりあえず
>先頭には使わない方がよいですね。

プリプロセッサの出力で識別子に'_'がつくからといって、'_'を自分の
プログラムの識別子に使っても何も問題は起こらないんですよね.
# __SomeClassみたいになるだけで...

もし問題になるとしたら、やっぱりMS-Cで警告されている(と思われる)
定義済みライブラリとの名前の衝突の可能性位だと思うんですけど、こ
れはJavaではpackageのおかげで問題になることはないような.

で、
public void foo() {}
public void _foo() {}
の時にfoo()から何らかのプリプロセスで_foo()というメソッド名が生成
されてしまった場合に困るという可能性はあります.
でもこんなのはプリプロセッサの問題なんですよね.

# 別に識別子先頭に'_'を使いましょうといっているわけではありません.

>> # たいしたことじゃない?今時はIDEが自動生成してくれるからかなあ.
>> # privateメソッドなんか下の方に固めといて普段は見ないから増えてもい
>> # いやってことかもしれないですね.(趣味の問題)
>> # 私は'_'書くよりprivate Foo getFoo() {・・・を書く方が面倒です.
>> ##### '_'って何かの顔? :)
>昨今のIDEってフィールドを定義するとアクセッサを自動生成するんですか?
>うーん、知らなかった。。。IDEはどうも好きになれないので・・・

私は使ったことないです.でもそれくらいは出来て当たり前なような気が
するので.
# メニューから「プロパティの追加」みたいな感じでやれば大概のもの
# はメソッド定義も作ってくれそうです.

>> しかし、get???()が常にnullを返さないことを全てのフィールドについて保
>> 証するような(lazy initialization)約束を作るのはちょっと性能的に問題
>> になる気がします.
>> get???()がnullを返すことがあったり、返さないことを保証していたりまち
>> まちであることは今でも変わらないので別問題ではありますが...
>性能面もそうですが、面倒なところも大いにありそうです。ただ、コンストラ
>クタで必ず初期化しているフィールドについてはnullチェックを省略できます。
>基準はあくまで基準なので、設計者がそこは適切に判断してどちらにするかを
>決める(きちんと設計する)べきでしょう。
>AmbySoftのコーディング基準の最初に、The prime directive(最優先指令)
>という項目があり、When you go against a standard, document it. と規定
>しています。

「例外的な処理はコメントすべし」は、「このグループでは何が標準か?」
が明確になったうえで有効ですね.(もちろん書いてると思いますが)
自分のプロジェクトの標準(規約)がよくわからなくて、自分では標準的
なことに対してもコメントを入れる事も多いです.
悪いことではないかもしれないけど(コメントしない人も多いし(怒))、
片っ端からコメントってのも見やすいかどうかは微妙ですねえ.

>ところで、Lazy Initializationって有効なんでしょうか? 使ってみた
>ことはないのですが。。。

そのフィールドが使われるタイミングが実行時に大幅に変わったり、使
われない可能性もある場合はまず有効といえますね.
実行中性能より起動性能を優先する場合もですね.
で、使い分けることが多いため、
>> get???()がnullを返すことがあったり、返さないことを保証していたりまち
>> まちであることは今でも変わらないので別問題ではありますが...
こういう問題がでるわけですけど...

># AmbySoftのコーディング基準でよいと思っている点は、ドキュメント
>#(コメント)の書き方について詳しく述べているところです。他人の
># コードを見るときは、適切にコメントされていないと・・・

そっちの話もします? :)

──────────────────
mailto:shin@xxxxxxxxxx
mailto:shinq@xxxxxxxxxx
http://village.infoweb.ne.jp/~shinq/
──────────────────