読書会(Effective Javaプログラミング言語ガイド)第4回議事録
[ 戻る ]
Effective Java 第 4 回議事録
日時:2002/8/24 10:00-16:45
場所:三田図書館 3F集会室B
参加者:高橋(徹)さん、金井さん、石黒さん、伊藤さん、村山さん、村上さん、
門脇さん、風舞さん、高橋(智)、中村さん、鈴木さん
朗読者:鈴木さん、村上さん
書記:高橋(智)
■ 項目25(メソッドのシグニチャを注意深く設計する)
P118
「速記(shorthand)」の具体的な意味は?
--> 複数のメソッドをまとめたメソッドを新設することではないか
--> ショートカットということだろうか
「メソッドが多くなってしまうが、直行性が増加して、メソッド数が減る」という
のはどのようか意味か? 結局、メソッドの「増加」なのか「減少」なのか?
「達人プログラマ」という本には、「直行性」について書かれている
--> ヘリコプターの操縦を例に使って解説されている
P119
ヘルパークラスを使ってパラメータを短くするのは、本当に便利になるのか?
逆に、ヘルパークラスを使うこと自体が面倒にならないか?
--> WindowsAPIの構造体パラメータを思い出す(泣)
--> プロパティ(Hashtable)を使ってはどうか?
--> 汎用性はあるが、型チェックはどうするのか
無名クラスは「能力」と「パフォーマンス」に制限があるとは?
--> 無名クラスのインスタンス生成にコストがかかるということ
--> 無名クラスにすると、言語上、可能なことが減ってしまう
「Javaとピザとデザインパターン」という本では、new が連続した長い一文が
掲載されている。
--> Lispチックである
--> 書き方としてはスッキリしているが、このような記述は分かりづらい
■ 項目26(オーバーロードを注意して使用する)
P120
オーバーロードのメソッドの選択は、コンパイル時に行われる
--> 直感的で分かりやすく、良いこともあるのではないか
P123
「JLS 5.1.7」にある「さらにいくつかの例」とは?
クラスの継承関係を描いた大きなポスターって最近見かけないねー
--> Javaのパッケージがあまりに巨大過ぎるからかも
--> JBuilderの古いバージョンには付いていたよーな気がする
オーバーロードの機能は、JavaやC++の入門書には必ず書かれている
--> 良いことなのか?
P123の一行目の「コンパイル時」と「実行時」は逆ではないか?
--> 翻訳ミス? 原著のミス?
複数のinterface A, B が、同じシグネチャを持つメソッドを持つ場合
--> A, B を実装するクラスでは、どちらのメソッドとして呼ばれたのか
判別できない
--> C#では区別して実装することが可能
P124
valueOfメソッド一個よりは、型ごとにvalueOfXXXXメソッドに分けたほうが
よいのか?
--> valueOfメソッド一個のほうが、直感的で分かりやすい
■ 項目27(nullではなく、長さゼロの配列を返す)
P125
システム実装上、長さ0の配列よりも、nullのほうが望ましいこともあるの
ではないか?
--> 長さ0の配列のほうが、nullチェックやnullポインタ例外の心配が無い
--> nullを返すメソッドは、どちらかと言えば何らかの例外を返したほうが良い
のではないか
「契約によるプログラミング」に関係したトピックである
配列を返さない普通のメソッドでさえ、nullを返すべきかどうか迷う!!
CORBAでは null をやりとりすることはできないので、長さ0の配列を使うことになる
--> EJBなどの、RMI over IIOP では、null は使用可能
■ 項目28(すべての公開API要素に対してドキュメントコメントを書く)
P127
コメントの最初の一文には ピリオド . を含めてはいけない
--> そーだったのか...
■ 項目29(ローカル変数のスコープを最小限にする)
P132
while文で、コピー,ペーストした変数名の書き直し間違いはよくある!!
VisualC++の古いバージョンでは、forループで宣言した変数をforループの外で使えた
C言語ではforループでは変数を宣言できなかったが、C99の仕様では可能である
--> ただし、対応したコンパイラがないのではないか
JBuilderでは、ソース中で iter と入力後に CTRL+J で イテレータを使用するwhile
ループを自動的に挿入してくれる
--> イテレータの変数名は固定
--> 本来なら、forループのほうが良いのでは? (笑)
■ 項目30(ライブラリーを知り、ライブラリーを使う)
P137
「Java逆引き大全」という本があって、アマゾンではかなりオススメになっている
--> どちらかと言えば初心者向き?
JDK1.4から、いろいろなAPIが一気に増えて、学習するのが大変!!
JDK1.4に入っているXMLライブラリが古くて、逆に使えない!!
--> XML実装を上手に置き換える方法があるらしい
--> XML実装を指定するプロパティファイルのこと?
■ 項目31(正確な答えが必要ならば、floatとdoubleを避ける)
P139
Bigdecimalの8種類の丸めモードでは足りないのではないか?
--> 1捨9入とかどーするの?
--> 結局、独自の丸めモードのロジックを作る必要あり?
BigDecimalはとっても遅いのか?
--> メチャクチャ遅い
--> Hotspotで、一ヶ月後には速くなってるとか(笑)
■ 項目32(他の型が適切な場合には、文字列を避ける)
P141
「ケイパビリティ」の日本語の訳は?
--> 機能、能力、拡張可能性、許容性、素質、将来性 ... とか?
--> セキュリティ関係の専門用語?
--> googleで検索したら「潜在的選択能力」と訳しているページがあった
P143
最後の一文が、日本語として分かりづらい
■ 項目33(文字列結合のパフォーマンスに用心する)
P144
Stringの + では、コンパイラがどのようにコードを生成するのか?
--> StringBufferが使われているらしい
■ 項目35(リフレクションよりもインターフェースを選ぶ)
P147
JDK1.4では、リフレクションのパフォーマンスが劇的に良くなっている!!
リフレクションを使うと、例外処理で、コンパイル時のような細かいチェックが
できない
■ 項目36(ネイティブメソッドを注意して使用する)
P150
JNIが遅いのは、呼び出しのオーバーヘッドがあるから
--> SWT はどうか?
--> 速いが、DLLなどの再配布が必要
■ 項目37(注意して最適化する)
P153
java.awt.Component の Dimension の問題で、C#ではプリミティブ型を参照で渡せる
80%,20%の法則は本当なのか?
--> 教訓的なものである
Profilingの需要はそれほど無いのではないか?
--> iアプリ, ライブラリ, 一般のApplication でそれぞれ状況が違う
--> 一般のApplication では、Profilingするよりも、正しいコードを
書くことのほうが重要!!
--> パフォーマンスはハードで解決したほうが良い(笑)
GUIの設計には、8秒ルール,3秒ルールがある
◆ さいごに
一次会は7名にて近くの居酒屋「素材屋」で17:00より開始。お一方\2,500也。
JavaOne 2002 in Japan では、Effective Java の著者である、ジョシュア・
ブロックさんが来日するようで、本を持参してサインを貰おうと思っています。
[ 戻る ]