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

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



澤田です。

On Mon, 27 Nov 2000 01:51:34 +0900
in [jfriends-ml 1441] Re: import 宣言はどっちのスタイルがよいか
Shin <shin@xxxxxxxxx> wrote:

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

私自身は import にはそれを期待していません。
前にも書きましたが、あるとすればやはり「利用しているパッケージ」を
知るためです。ソースを読み始めるときの最初の一歩程度・・

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

それを指摘されると辛いのですが、その点は JBuilder でソース読むように
すると楽です。別に JBuilder のすべてが嫌いというわけではないです(^^;

ツールに頼るという解決策が良いのかどうか?という問題は残りますね。


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

そうですね。賛成します。


> >JDBC使う場合のClass.forNameは変則的な使い方だと思います。
> >JDBCドライバ(java.sql.Driver)は自身のクラスがロードされたときに
> >インスタンスを作成して DriverManager に登録するというルールがあります。
> >だから使う方は Class.forName() するわけです。
> 
> 私JDBC使ったことがないんですが、これなんでA.classとかじゃ駄目なん
> でしたっけ?(と安易に聞いてしまう^^)
> # A.classじゃ最適化で消される危険があるから?またはその他の要因でク
> # ラスのロードがされないことがある?

最適化で消されちゃうという危険性もあるかもしれませんが、
それよりも、そもそもロードするドライバをどれにするかをパラメータに
したいという要求があると思います。

あれ?それじゃ Class.forName を変則的に使っているわけではないじゃん>自分

___
澤田 大輔(die)
email: die@xxxxxxxx(home), swd@xxxxxxxxxxxxxxxx(office)
「積読」 http://www.techbrains.co.jp/~swd/book/