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

[jfriends-ml 1441] Re: import 宣言はど っちのスタイルがよいか



In article <200011240544.AA00577@xxxxxxxxxxxxxxxxxxxxxxxxx>
Daisuke Sawada wrote:
>> swing、awtのようにクラスが多いパッケージや、java.utilのように毛色の異なる
>> クラスがごった煮のようになっている場合は、利用しているクラスまで知りたいな
>> と思うのですが、いかがでしょう?
>
>Swing, AWT関連はクラスが多いからこそ import ..*; にしたいです(笑)。
>java.util も私は java.util.*; と書いてしまいますね。それだけでは
>本当は何を使いたかったかを知る事が出来ないけど。

えーと、利用しているクラスが知りたいというケースがあるんでしょう
か?
私の主張は初心者向けの記事では徹底的に*は使うな一点張りですが^^、
一般的には、コアAPIなどで、且つまわりの人間がクラス構成を把握して
いるものについては*もつかい、少なくともプロジェクト内で作成したク
ラスを使用する場合は全てimportでフルネーム表記とします。
理由は多分言うまでもないですが、新規にプロジェクトに参入する人が
ソースを読むときにクラスが*どのパッケージにあるか*を見つけやすくす
るためです。

>> > > また(b)で大量のクラスをimportしているクラスは結合度が強くなりすぎている
>> > > かもしれないので、少しimportが減るようにリファクタリングした方がよい場合が
>> > > 多いし、仮に大量にimportがあっても問題にならないと思います。
>> > 
>> > 確かにそういう分析のためにimport宣言を利用するのであれば
>> > (1)にすべきですが、厳密にやろうとすればimportは書かずにFQCN(こんな
>> > 呼び方があるんですね。知らなかった・・)を直接書いている部分も調査する
>> > 必要があるし・・とか安易に反論してみます。墓穴掘ったかも。
>> 厳密にすると、Class.forNameで文字列渡しを用いるコードもあるんです。
>
>Class.forNameは目的があって使っていると思うので、同列には扱えない
>のではないでしょうか?そもそも Class.forName を使う時点でコンパイラを
>素通ししてしまうというリスクを犯すわけですから、相応のメリットがないと。

どうもソースコード内で毎回フルネームで記述するのをサボる為だけの文
法に別の意味を持たせようとしているように見えます。
参照クラス数が多いかどうかはツールで検出すべきという気がしますね
ぇ。

>> RDBMSはほとんど触らないのですが、たまたまJDBC使うコードみたら、
>> JDBCドライバをロードするところでClass.forNameを使うのが常套手段
>> みたいですね。
>
>JDBC使う場合のClass.forNameは変則的な使い方だと思います。
>JDBCドライバ(java.sql.Driver)は自身のクラスがロードされたときに
>インスタンスを作成して DriverManager に登録するというルールがあります。
>だから使う方は Class.forName() するわけです。

私JDBC使ったことがないんですが、これなんでA.classとかじゃ駄目なん
でしたっけ?(と安易に聞いてしまう^^)
# A.classじゃ最適化で消される危険があるから?またはその他の要因でク
# ラスのロードがされないことがある?

>> ちょっと実験で作るSwingのプログラムの場合、いちいちimport指定するのが
>> 面倒なので、import javax.swing.*;とやってしまいます。
>
>「面倒なので」で突破出来ちゃうという点で、コーディングルールとしては
>強制しにくいかもしれませんね(^^;

逆にJBuilderみたいな(自動補完する)ツールは役に立つんじゃないかなあ
と思ったり^^。
# 以前逆コンパイルにかけるなんて書きましたけどimport節を整理する
# ツールくらいは作ろうかなともおもふ。

-- 
木下 信@ひらつか
http://www.sk-jp.com/