「Scalaスケーラブルプログラミング」6章

所感

  • 理解
    • immutableの欠点は,多数のデータを持つオブジェクトで一部の値の更新が頻繁にある場合. 更新のコードが煩雑になるし性能上の問題にもなりうる.
    • すべてのクラスは,デフォルトでjava.lang.Objectクラスを継承している
    • 事前条件を明記しチェックするためにrequire関数が使える
    • class MyClass(a:Int, b:Int)のa, bのは
      • コンストラクタの引数である
      • メソッドの中で参照できる
      • 外からは参照できない
    • class MyClass{val a:Int, val b:Int}のa, bは
      • 外からも参照できる
    • Pythonのselfのように,メンバXにアクセスするのにthis.Xとかける
    • 補助コンストラクタを定義できる.def this(…) ただし,基本のコンストラクタで最終的に書く必要がある(最後はthis(オリジナル引数)).
    • 例では,メンバがvalになっていることで,メンバ変数の再代入ができない,mutableになっている
    • 何も書かなくても,*で定義したメソッドが +で定義したメソッドより優先して計算される
    • 識別子の定義の仕方
      • alphanumeric 先頭はalphabetか_,その他は$以外の英数字 ($がalphabetという感覚はなかった)
      • 演算子文字 ( +-/=><?:等)
      • mixed identifiers 例:unary+ : +として働く myvar= : =として働く (アンダースコアの後に演算子)
      • literal identifiers ``で囲まれた物はなんでも識別子にできる.scalaの予約語となっているjavaのメソッドにアクセスする場合など
    • overload
      • 同じ演算子を,別の型に対しても適用可能にする
      • ただ引数を変えてメソッドを定義すれば良い
    • implicit conversion
      • implicitをつけて関数を定義すると,型の問題でメソッドが適用できなかった時に自動でその関数を使って適用できるようにすることができる
  • 補足
    • 同じ入力型,出力型を持つimplicit conversionを2つ定義すると,型変換を必要とするメソッドを定義した際にエラー(type mismatch)が出る.エラーメッセージも2つ適用できる物があるというもの
  • わからなかった点
    • 実際ライブラリを作る時に,暗黙の型変換はどこで定義すれば良い?

      つまづいた概念

  • オブジェクトグラフ
    • javaで,インスタンスを表すデータの構造のこと.