読書会(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より。
[ 戻る ]