daybreaksnow's diary

私を私と呼びたい

[Scala]入門 クラスとパッケージ

以下の連載の6回目読んだ。
http://www.atmarkit.co.jp/ait/kw/scala.html


覚えておきたいことメモ

クラス

コンストラクタに渡した値はそのまま使える

class Hoge(val v:Int)

val hoge = new Hoge(1)
println(hoge.v)
//err hoge.v = 2

valもvarもついていないと外に見えない

class Piyo(val v:Int)

val piyo = new Piyo(1)
err println(piyo.v)

・require(条件式)でアサーションする

class PG(val lang:String){
 require(lang != null) //IllegalArgumentExceptionが投げられる
}

★パラメータなしのメソッドはフィールドでオーバーライドできる

abstract class X{
  def value:Int = {
    println("X value")
    1
  }

}

class Y extends X{
  override val value = 2
}

アクセス修飾子

・クラスのアクセス修飾子はデフォルト
・protectedは継承先のみ見える、Javaと違い同パッケージは見えない
・パッケージ指定ができる
fooとそのサブパッケージにのみ見せる

 private[foo] class Hoge

・別インスタンスからのアクセスを禁止できる

 private[this] val name= "hoge"

インポート

一括インポート
import foo.bar._
指定インポート
import java.util.{List,Map}
エイリアスを与えてインポート
import java.util.{Date => MyDate}
暗黙に行われているインポート
import java.lang._ //標準のJavaクラス。
import sclala._ //scalaパッケージ。Listなど。
import Predef._ //Predefオブジェクト。printlnやタプル(を生成する関数)

objectをインポートすると、オブジェクト名を指定せず利用可能(static import状態)



・よく分かってない事
パターンマッチとcaseクラスとsealedクラス
パッケージオブジェクト