ピコラボで有志により開かれている読書会の議事録を以下ご紹介します。ご興味ありましたら、「お問い合わせ」フォームで気軽にコメントなど頂けると幸いです(なお、議事録の議論内容等は各参加者個人の意見であり、会社の意見ではない点、ご了承ください)。

読書会情報

  • 書籍
    • 増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編
  • 発表対象
    • Chapter 2

質問・議論

final フィールドについて

  • 質問: final field でも書き換えられてしまうのか?
  • 回答: Java では参照が変更不可というだけ
  • 議論: Rust では mutable 参照という概念がある。
  • (続): mutable 参照を外部に渡さなければ書き換えられない
  • (続): C++ でもポインタの const とオブジェクトの const を区別できる

不変オブジェクトを選択する場面について

  • 意見: 可変にするか不変にするかは設計の問題ではないか
  • (続): 可能な限り immutable にしたい

不変性の保証について

  • 質問: 不変なフィールドであればメソッドの戻り値にしても安全か?
  • 回答: フィールドに格納されるインスタンスも不変であれば Yes
  • 議論: immutable である条件として以下が挙げられている
  • (続): 1. setter を提供しない
  • (続): 2. final private
  • (続): 3. 可変コンポーネントに対する独占的アクセスの保証

Point と Line の問題の議論

  • 質問: 例えば C++ なら const 参照を渡せばよいのか?
  • 回答: const 参照は callee 側で変更しないだけなのでこの問題は解決しない

スマートポインタの議論 (C++, Rust)

  • 議論: Java 以外ではどのように扱われるのか
  • (続): C# だと class と struct の区別がある
  • (続): C++ ではスマートポインタが存在する
  • 質問: スマートポインタは move semantics を持つのか?
  • 回答: いくつかの種類がある。unique_ptr は move semantics を持つ

MutablePerson と ImmutablePerson の問題の議論

  • 議論: Java の実装で StringBuffer と String の関係はどうなっているか
  • 調査: String(StringBuffer) は内部で StringBuffer.toString() を呼ぶ
  • (続): StringBuffer.toString() は synchronized になっている