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

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




In article <37FE1493.D16F1E3@xxxxxxxxxx>
Toru TAKAHASHI wrote:
>---------------------- 引用 ---------------------------------
>What Makes Up a Good Name
>We will be discussing naming conventions throughout the standards,
>so let's the stage with a few basics:
>(中略)
>7. Avoid leading or trailing underscores. Names with leading or 
>trailing underscores are usually reserved for system purposes,
>and may not be used for any user-created names except for pre-
>processor defines(NPS, 1996). More importantly, underscores are
>annoying and difficult to type so I try to avoid their use 
>whenever possible.
>----------------------- 引用終わり ---------------------------

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は独自拡張の関数先頭などに_を付けてい
# るようですが...

タイプしづらいか...私も元々目印をつけることだけを重要視していて、末
尾'_'にしたのは「じゃばじゃば」を見てからなので、最初はそんなことも
思ったかも:)

>> _がきれいとは思わないのですが、クラス内の全てのフィールドに
>> getter/setterを付加することで、変数名に目印を付ける事より可読性が
>> 上がるとは思えません.
>> つまり、むだにソースコードが長くなる分可読性が落ちることに関して
>> は言及されていないですよね.
>ここはどちらが可読性がよいか議論の別れるところです。フィールド名に
>setかgetと()が増えるだけなので、「むだに」というほどには長くならな
>いと思います。nullチェックしてからフィールドにアクセスするとしたら
>if文が介在してかえって可読性が落ちることもありますし。。。

うーん.私はメソッド定義が増えることを気にしたんですけど、あんまり気
にすることじゃないのかなあとも思うのでやっぱりだれも言及しないのでし
ょうかね?
# たいしたことじゃない?今時はIDEが自動生成してくれるからかなあ.
# privateメソッドなんか下の方に固めといて普段は見ないから増えてもい
# いやってことかもしれないですね.(趣味の問題)
# 私は'_'書くよりprivate Foo getFoo() {・・・を書く方が面倒です.
##### '_'って何かの顔? :)

変数の参照箇所をgetFoo()にすること自体は割と見やすくなるかなと思って
います.
単にreturn foo;ならインライン展開で同じ結果になるでしょうし.

しかし、get???()が常にnullを返さないことを全てのフィールドについて保
証するような(lazy initialization)約束を作るのはちょっと性能的に問題
になる気がします.
get???()がnullを返すことがあったり、返さないことを保証していたりまち
まちであることは今でも変わらないので別問題ではありますが...


──────────────────
mailto:shin@xxxxxxxxxx
mailto:shinq@xxxxxxxxxx
一年半くらいメンテナンス中扱いだったURLをそろそろ公開しようかな.
取り合えずこっちでだけ:)
http://village.infoweb.ne.jp/~shinq/
これで程度がばれてしまうのですが...
──────────────────