まずは、tutorialspointというサイトの『LEARN SCALA PROGRAMMING』を読んでみた。今日は半分くらいまで読んだ。
学んだこと
- 2003年にMartin Odersky氏によって開発された言語
- オブジェクト指向言語
- 関数型言語
- 静的型付け言語
- JVM上で動作する
- すべてオブジェクト。Primitive型はない。
- mutableな変数はvarで宣言
- immutableな変数はvalで宣言
- 型推論あり
- アクセス修飾子はprotected/privateの2つが指定可
- アクセス修飾子を省略するとpublic
- イコール記号とメソッドのボディを省略すると、メソッドはabstractになる
- voidの代わりにUnitを使う
- methodはクラスに属する処理
- functionは変数に代入できる完全なオブジェクト
- 戻り値の無い関数はprocedureと呼ばれる
- call-by-name(変数: => 型)を使うと遅延評価
- 無名関数は引数 => 戻り値のように宣言
- 関数の部分適用をサポート
- 関数のカリー化ができる
環境インストール
MacにScalaの環境をインストールした。
> brew install scala > brew cask install scala-ide
サンプルプログラム
FizzBuzz、ユークリッドの互除法、たらい関数を書いてみた。
object FizzBuzz { def main(args: Array[String]) { var i = 0; for (i <- 1 to 100) { if (i % 3 == 0 && i % 5 == 0) println("FizzBuzz") else if (i % 3 == 0) println("Fizz") else if (i % 5 == 0) println("Buzz") else println(i) } } }
object Gcd { def main(args: Array[String]) { println(gcd(132, 66)); } def gcd(a:Int, b:Int) : Int = { if (b == 0) return a return gcd(b, a%b) } }
object Tarai { def main(args: Array[String]) { println(tarai(20, 10, 5)); } def tarai(x:Int, y:Int, z: => Int) : Int = { if (x <= y) return y return tarai(tarai(x-1,y,z), tarai(y-1,z,x), tarai(z-1,x,y)) } }