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

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




高橋です。

Shin wrote:
> JLSの3.8 Identifiersに、
> 
> 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 のように'_'がついてます。とりあえず
先頭には使わない方がよいですね。

> うーん.私はメソッド定義が増えることを気にしたんですけど、あんまり気
> にすることじゃないのかなあとも思うのでやっぱりだれも言及しないのでし
> ょうかね?
メソッドが増えるという問題は確かにありますね。コード量が増えれば、バグ
も増える、保守性も下がる・・・

> # たいしたことじゃない?今時は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って有効なんでしょうか? 使ってみた
ことはないのですが。。。

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

-- 
Toru TAKAHASHI :-O    torutk@xxxxxxxxxx
http://www.alles.or.jp/~torutk/