読書会(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 の著者である、ジョシュア・
   ブロックさんが来日するようで、本を持参してサインを貰おうと思っています。


[ 戻る ]