- PR -

importの記述について

投票結果総投票数:143
一つずつ 92 64.34%
*でひっくるめて 49 34.27%
その他 2 1.40%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2004-01-15 00:07
*派が思いの外少ないのにびっくりです。
私は使用しているクラスが分かったところで、
嬉しかった試しがないので*を多用しています。
Eclipseを使用していると、*で括っているのを
展開するのも簡単に出来るので、一覧が必要に
なったときに考えればよいでしょう。
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2004-01-15 00:24
>メモリに関しては、本当に何も知らない状態で聞かされたので、
コンパイル時に影響があるなしの前に,Javaは普通は動的リンクです.
「ダイナミックなんとか」なんて名前が付いてなくても,当たり前のように
全て動的に処理されます.

たとえクラスファイルに影響を与える場合でさえも,実行時に実際に呼び出される
までは,そのクラスファイルは「ロード」されないのでメモリを消費しないそうです.
初回実行時に初めて,JavaVMがそのクラスをロードします.

それに,いまやクラス定義自体が消費するメモリなんて,全体からすると
微々たるもののはずなんですけどね.動的リンクのことも分かってない人だと
メモリのことまで考えてコードを書くのはかなり厳しいでしょう..
yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2004-01-15 10:55
私もおかもとさんと全く同意見です。
必要になった時点で展開すればいいと思って、*を使っています。
その方が、普段は楽ですので。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-01-15 11:16
unibon です。こんにちわ。

JDK(J2SE SDK) のソースコードはどうなっているんだろう、と思って見てみましたが一貫性があるのかないのかが良く分かりません。たとえば String クラスだと、* を使わずに律儀に書いてありますが、Runtime クラスだと、* を使った import と * を使わない import が混在しています。
#余談ですが、import よりも、コメント中の日付フォーマットを統一してほしい。YY/MM/DD なのか MM/DD/YY なのか良く分からない。たとえば 01/23/03 っていったいいつなんだ?

ただ、依存関係のルートに近い String クラスとかだと、* を使わないで import していたほうが見ていて安心感があります。そういうことがあるから、逆に * を使うのは乱暴だ(繊細さがない)という印象を与えてしまうのかもしれません。
しかし * を使わないからと言っても、ソースコード中の import より後ろのメソッド定義のところで java.io.Serializable とかパッケージ名付きで登場することもあるので、import で判断するのは厳密ではなく、したがって * が付いていないから良い、というのはやはり幻想のように思います。



#最後の部分は、「...したがって * が付いているから良い、...」と間違って書いていたので、あとで修正しました。

[ メッセージ編集済み 編集者: unibon 編集日時 2004-01-15 11:20 ]
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-01-15 13:32
引用:

おかもとさんの書き込み (2004-01-15 00:07) より:
*派が思いの外少ないのにびっくりです。
私は使用しているクラスが分かったところで、
嬉しかった試しがないので*を多用しています。
Eclipseを使用していると、*で括っているのを
展開するのも簡単に出来るので、一覧が必要に
なったときに考えればよいでしょう。




確かにEclipseを使えばいつでもimport文を展開できますが、
個人的意見でははじめから展開して記述すべきと思っています。

その理由としては、

・そもそもimport文を書かない
 Eclipseを使い出してからはそもそもimport文を書きません。
 Ctrl+Shift+Oを多用します。

・ソースコードの変更が容易でない
 実際のプロジェクトでは、政治的・管理的な理由からいったん
 リポジトリに格納したソースコードを修正するのに事務的手続きが
 必要だったりするので、後からimport文を展開するというのが
 できない(あるいは難しい)場合があります。

・テスト
 import文を展開した後、テストを実施する必要があるか、が問題です。
 たかがimport文ですが、java.util.Dateとjava.sql.Dateの違い等、
 バグを引き起こす可能性が無いとはいえません。

 例えばテスト済みの数百、数千ものソースコードを一気にimport展開した
 として、ずべてのテストをやり直すのか、と言う話になります。

と言うところです。

unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-01-15 14:12
unibon です。こんにちわ。

引用:

YOU@ITさんの書き込み (2004-01-15 13:32) より:
・テスト
 import文を展開した後、テストを実施する必要があるか、が問題です。
 たかがimport文ですが、java.util.Dateとjava.sql.Dateの違い等、
 バグを引き起こす可能性が無いとはいえません。


これは、私の前回の「杞憂」と似ていると思いますが、直接バグに結びつくことはありません。コンパイルすると「あいまいです」と怒られます(あいまいなまま実行できるクラスファイルが作られることはないです)。
そこで、ソースコードを修正するわけですが、その際に、
コード:
import java.util.*; // Vector 用
import java.sql.*;



コード:
import java.util.Vector;
import java.sql.Date;


とするか
コード:
import java.util.Vector;
import java.util.Date;


で、間違ったほうを選んでしまうと、バグになってしまいます。
#ほとんどの場合は、シグネチャーが合わないのでコンパイルエラーになりますが、100%そうなるとは限らない。

また、これもほとんどありえないとは思いますが、java.awt.List クラスがなくなるタイミングと java.util.List インターフェースができるタイミングが等しいと、「あいまいです」というコンパイルエラーにすらならず、気づかないままバグが埋め込まれてしまう可能性もわずかながらあります。
#これには上記のシグネチャーのこともすり抜けた場合の話なので、確率は相当低いですが。
標準 API なら互換性を重視するためまずありえないでしょうが、自前のクラスだとありえるかもしれません。

でも、そんな細かいところまで神経を使っても、たぶん、別のバグの発生の可能性のほうが高い気がするので、あまり import にこだわってもなあ、というのが私の主観になります。
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2004-01-15 23:12
引用:


・そもそもimport文を書かない
 Eclipseを使い出してからはそもそもimport文を書きません。
 Ctrl+Shift+Oを多用します。




どっちでも良いのですが、この部分はとても新鮮でした。
「import文を書きますか?」って投票したらどんな結果になるんだろう・・・。
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-01-16 15:18
どうも、Wataです。
一応私はひとつずつ派ですけど、Eclipseとか使っているとやっぱりどっちでもいいですね。
どちらにしても、書く手間もないし、参照先を迷うこともありませんから。

でも、java1.5のstatic importが入ってくると、
また少し話が変わりそうですね。
# 実務では1.4もろくに使えない状況ですけど (^^;

スキルアップ/キャリアアップ(JOB@IT)