Scala雑記#1
環境
sbtがよしなにやってくれる
$ brew install sbt
$ sbt console
変数宣言
val <変数名> = <中身>
val <変数名>: <型> = <中身>
Hello, World
object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, World!") } }
if
if (条件式) { do } else { do }
while
while( n <= 5 ){ println("hoge") i += 1 }
for
for(x <- 1 to 5; y <- 1 until 5 ) { println(x, y) }
こうすると
x = 1 y = 1 x = 1 y = 2 x = 1 y = 3 x = 1 y = 4 x = 2 y = 1 x = 2 y = 2 x = 2 y = 3 x = 2 y = 4 x = 3 y = 1 x = 3 y = 2 x = 3 y = 3 x = 3 y = 4 x = 4 y = 1 x = 4 y = 2 x = 4 y = 3 x = 4 y = 4 x = 5 y = 1 x = 5 y = 2 x = 5 y = 3 x = 5 y = 4
こうなる。便利。
match
<対象> match { case <パターン> (if式) => <式> case <パターン> (if式) => <式> }
val hoge = "hoge" hoge match { case "hoge" => "HOGE" case "huga" => "HUGA" case _ => "other" }
一番したのはワイルドカード、defaultとかに相当すると思って良さげ
val lst = List("A", "B", "C") lst match { case List("A", b , c) => println(b, c) case _ => println("nothing") }
こんな感じ
val lst = List("A", "B", "C") lst match { case List("A", b , c) if b != "B" => println(b, c) case _ => println("nothing") }
パターンマッチに対してifガードもかける。
val lst = List("A", "B", "C") lst match { case "A" :: b :: c :: _ => println("b = " + b) println("c = " + c) case _ => println("nothing") }
こうもかける。 :: (中間パターン)でパターンマッチを行なった際、リスト末尾の無視のために _ の挿入が必要。
case v:java.lang.Integer
よろしく型でのパターンマッチもできるよ。
class
class Point(val x: Int, val y: Int)
def <メソッド名> (引数名: 型)*: <返り値の型> = <式>
class Adder { def add(x: Int, y: Int): Int = x + y }
簡単なのだとこんなの
class Hoge() extends Huga { }
で継承もできる。overrideも同様。
基礎基礎文法だけだけど、今日はとりあえずここまで...