フェイ=サンの何か

このブログは筆者が感じたことを淡々と書くブログです.過度な期待はしないようにしてください

【プログラミング】【Scala】コップ本、長い。(Scala勉強3日目)

6章

このあたりからScala特有の内容が含まれて来て徐々にペースダウン。

 

6章:関数型スタイルのオブジェクト

Javaではクラスがコンストラクタを持ち、コンストラクタがパラメータを受け取るが、Scalaはクラスが直接パラメータを受け取る。基本コンストラクタって言うらしい

 コンストラクタでの処理はそのまま記載する

例:    class Hogehoge (x:Int, y:Int){

              println(x + "hoge-" + y)

          }

Javaから入った身としてはすごく違和感。。

 

・イレギュラーな値かどうかをコンストラクタでチェックしたいならrequireメソッド

 想定外ならIllegalArgumentException投げてくれるよ

例:  class Hogehoge(x:Int, y:Int){

     require(x != 0)

                  println(x + "hoge-" + y)

        }

・メソッドとかでコンストラクタの引数を使いたいなら一回変数におくべし

・オーバーライドの方法はC#に似ている(気がする)

例:    class Hogehoge (x:Int, y:Int){

    require(x != 0)

              println(x + "hoge-" + y)

      val a = x

      val b = y

      override def toString = a + "hoge" + b

          }

 

・自己参照のthisはJavaとおんなじ感じで使える

・基本コンストラクタ以外にコンストラクタを持ちたいときはthisを使おう

 補助コンストラクタって言うらしい

例:    class Hogehoge (x:Int, y:Int){

    require(x != 0)

              println(x + "hoge-" + y)

      val a = x

      val b = y

    def this(z:Int) = this(z, 0)

      override def toString = a + "hoge" + b

          }

演算子もメソッドなのでこんなこともできる

  def + (x:Int, y:Int):String = x + "hoge" + y

・オーバーロードは存在する。感覚としてはJavaと同じ