読書会(Scalaスケーラブルプログラミング)第2回議事録

[ 戻る ]


Java読書会 「Scala スケーラブルプログラミング」を読む回(第2回)議事録

日時 : 2009/12/26(土) 10:00-17:00
場所 : 高津市民館 第5会議室
出席者:石黒、今井、岩室、遠藤、岡澤、尾関、小棚木、児島、小松、高橋(徹)
    高橋(智)、中島、村山、山内、和田、吉本(書記)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

■第04章 クラスとオブジェクト

■4.3 シングルトンオブジェクト
 P77
 P78
 P79
  ・synthetic classのsyntheticとは?
   →シンセサイザーのシンセのことか?

  ・シングルトンオブジェクトとコンパニオンクラスは別のもの。
   →別の名前空間を持つ。
   →Javaに落とすと、・・・$のクラス名になる。

  ・クラスから見るとオブジェクト、オブジェクトから見るとクラス。

  ・コンパニオンオブジェクト内に自分の名前を使った場合、何を指すのか?
   →そもそもScalaにはstaticが無いので、必ずクラス名.メソッド名セマンティクスになる。
   →静的メンバーが持てないため。

  ・外部からnewすると、コンパニオンクラスのインスタンスが生成される。
   →シングルトンという名前に違和感がある使い方。
   →必須ではないので、同名のクラスを作らなければシングルトンになる。
    (スタンドアローンクラス)

  ・シングルトンオブジェクトとコンパニオンは、互いに読み書き可能。

  ・結果的にシングルトンになるというのは、何か違うような気がする。
   →無名クラスでもいいのでは?
   →無名クラスだと定義している所だけでしか呼び出せない。

  ・レシーバーでは、自動的にapplyメソッドを呼び出す。
   →型の場合、コンパニオンクラスapplyメソッドが呼び出される。
   →クラスの場合、自分のapplyメソッドが呼び出される。
   →型を持つJavaVM上で、オブジェクトへのメッセージ呼び出しを
    何とか実現させるための方法と思われる。 

■4.4 Scalaアプリケーション

 P80
 P81

■4.5 Applicationトレイト

 P82
  ・なぜ明示的にmainメソッドを必要とするのか?

■4.6 まとめ

 P83

■第05章 基本型と演算子

■5.1 基本型

 P84

■5.2 リテラル

 P85
  ・intを使えるようになっているのは、何か歴史的経緯があるのか?
   →経験則的に使えるようにしていると思われる。

  ・なぜStringだけはJavaのクラスを使っているのか?
   →プリミティブ型のクラスは、Scalaが独自拡張しているため。

 P86
 P87
  ・なぜ小文字エルのリテラルを言語仕様的に切らなかったのか?
   →Javaでも散々間違えやすいものとして扱われている。
   →8進リテラルも要らないかも。

  ・代入時、値が型の範囲外の場合エラーとなる。
   →Javaでも範囲外の場合はエラーとなる。

 P88
 P89
 P90

■5.3 演算子はメソッドである

 P91
 P92
  ・Int + Long = Longとなっているが、Javaは反対ではなかったか?
   →Javaも同じ。
   →明示的なキャストが必要な時もある。

 P93
 
■5.4 算術演算

 P94

■5.5 関係演算子と論理演算子

 P95
  ・負のリテラルは無いのか?

 P96

■5.6 ビット単位演算

 P97

■5.7 オブジェクトの等価性

 P98
 P99

■5.8 演算子の優先順位と結合性

 P100
 P101
 P102
  ・Scalaでは日本語のメソッドは定義出来るのか?
   →出来ると思われる。
   →その場合の優先順位はどうなるのか?
   →その他の特殊文字になるのか?
   →特殊文字はアスキー文字だけなのか?

■5.9 リッチラッパー

 P102

■5.10 まとめ

 P103

■第06章 関数型スタイルのオブジェクト

■6.1 Rationalクラスの仕様

 P104

■6.2 Rationalの構築

 P105

■6.3 toStringメソッドのオーバーライド

 P106

■6.4 事前条件のチェック

 P107

■6.5 フィールドの追加

 P108
 P109
  ・toStringメソッドで、なぜnやdの変数が使えるのか?
   →実装レベルで何かをしているのかもしれない。
   →内部的にフィールドとして宣言しているようだ。

■6.6 自己参照

 P110

■6.7 補助コンストラクター

 P111
  ・コンストラクタが多いクラスと継承すると、サブクラスはどのコンストラクタを呼ぶべきか迷うことがある。
   →そのためコンストラクタ呼び出しの制約があるのは、ある意味合理的。

  ・補助コンストラクタで使用されているnは、別の変数でもいいのか?
   →左辺と右辺の対応が取れていればいいはず。

■6.8 非公開フィールドとメソッド

 P112

■6.9 演算子の定義

 P113
 P114

■6.10 Scalaの演算子

 P115
 P116

■6.11 メソッドの多重定義

 P117

■6.12 暗黙の型変換

 P118

■6.13 [使用上の注意]演算子メソッドと暗黙の型変換

 P119

■6.14 まとめ

 P120

■第07章 組み込みの制御構造

■7.1 if式

 P122
 P123

■7.2 whileループ

 P124
 P125

■7.3 for式

 P126
 P127
 P128
 P129
 P130

■7.4 try式による例外処理

 P131
 P132
  ・catchにかからなかった場合は?
   →握り潰す?
   →再throwしているわけではないので、catchされずにそのまま上に返っていくと思われる。
 
 P133

■7.5 match式

 P134

■7.6 breakとcontinueを使わずに済ませる

 P135
 P136

■7.7 変数のスコープ

 P137
 P138
 P139

■7.8 命令型スタイルのコードのリファクタリング

 P140

■7.9 まとめ

 P141


以上

次回は、P142より。


[ 戻る ]