Javaと同じ部分が多いが、全部同じと言う訳ではない。
4.1 Classes, fields, and methods
classの定義: members = fields + methods
class className {
val or var field
def methods (...) = ...
}
new classNameでインスタンス化
membersはdefaultでpublic、
関数の引数はval。varではない。
returnは省略できる。最後に評価される値を返す。
戻り値をUnitにすれば最後に評価された値も返されない。
=なし{}で定義すると戻り値Unitを省略できる。=
def func(a: Int) {a + 1}
?? procedureの様に見えて副作用を強調出来るのでこの方が
?? と言っても間違って=
** 色々な簡略化のための省略形を推奨している。
** style guideを見てどう書くかを確認する。
4.2 Semicolon inference
文の終わりは;だが、殆どの場合で省略出来る。
複数行にする際は下記にすると良い。
二項演算子の演算子は、行頭ではなくて行末にする。
()[]などの中の途中で改行する。
その他そこが文の区切りになりえない所で改行する。
4.3 Singleton objects
singleton objectsはclassと同じファイルに同じ名前で入れると
お互いのprivateのメンバにアクセス出来る。
Javaのstatic methodと似ている。
更にfirst class objectsでもある。
singleton objectsではtypeは定義されない。
superclassを拡張したりtraitとmixed-
singleton objectsはパラメータを取らない。new出来ない。
singleton objectsはsynthetic classのinstanceとして実装されている。
Javaと同じように最初にコードにアクセスされたときに初期化
companion objects以外はstandalone objectsとなる。
関連している関数をまとめる。
scalaのエントリポイント定義する。
4.4 A Scala application
下記のメソッドを持つstandalone objectがscalaプログラムのエントリポイント
def main(args: Array[String]): Unit
object名やclass名はファイル名と合わせなくても良い
javaでは合わせる必要がある。
javaと同様に合わせることを推奨する。
1ファイル、1 public class, objectが推奨
** REPLで:paste, :power等が使える。nt-emacsだとctrl-
java.langとscalaが元々importされている。
Predefと言う名前のsingleton objectとして。
println -> Predef.println -> Cosonle.println
** singleton objectはレシーバになっている。
Predef println "a" はOK。
scalacに.scalaファイルを渡してコンパイル。
fscと言うサーバを上げれば2回目以降は早くなる。
fsc -shutdownで終了。
コンパイルするとjavaのクラスファイルが出来る。
scalaコマンドに拡張子なしでmainが含まれるクラスを渡
scala Summer of love
?? scalaコマンドを含んだバンドル??を作るには? これを作るのがsbt??
4.5 The Application trait
scala.Applicationと言うtraitがある。
traitは後で扱うのでここでは完全に理解できなくても良い。
このtraitを継承すれば使えばmainの記述が不要になる。
object FallWinterSpringSummer extends Application {
ただし、副作用も多いので注意が必要。
argsが使えない、multi-threadで使えない。
{}の内側はprimary constructorに渡されて初期化時に実行される。
?? mainを定義しているわけではなくて、
4.6 Conclusion
class, object, compile, run applicationsの基本を勉強した。
次は基本typeとその使い方。
0 件のコメント:
コメントを投稿