Scala プログラミング勉強メモ (2)

最近購入した「Scalaプログラミング入門」というご本の勉強メモ。

Hello World!

おなじみの Hello World! と出力するコード。

println("Hello World!")

scala コマンドにファイル名を渡してあげることで、実行することができる。

$ scala HelloWorld.scala
Hello World!

変数の定義

変数の定義は、varvallazy val キーワードを使用する。

var 変数は、一度値を代入した後、別の値を再代入することができる。

var foo: String = "Foo"

val 変数は、一度しか代入できない。また、変数が含まれているコードブロックが実行されたときに評価される。

val bar: String = "Bar"

lazy val 変数は、一度しか代入できない。また、変数にアクセスしたときに評価される。

lazy val baz: String = someLongQuery()

特別な理由がない限り、val 修飾子を使うのがよいそう。

また、Scala の型推論は優秀なのだそうで、変数の型が明白な場合は型の宣言を省略したほうがコードがすっきりする。

var foo2 = "Foo"
var bar2 = "Bar"

メソッドの定義と呼び出し

メソッドの定義は def キーワードを使用する。
以下は Hello World! と出力するプログラムをメソッドを使って実装した例。

def HelloWorld(): String = {
  "Hello World!"
}

println(HelloWorld) // => Hello World!

def キーワードに続いて、メソッド名、引数、戻り値の型、= キーワード、メソッド本体を記述する。
HelloWorld メソッドは引数なし、String を返すメソッド。

メソッドの呼び出しは () 内に引数を渡すことで実行できる。
また、引数がない場合は () を省略できる。
HelloWorld メソッドは引数をとらないので、呼び出すときは () を省略できる。

また、メソッドの定義は 1 行で記述することも可能。

def HelloWorld(): String = "Hello World!" 

以下は、引数をとるメソッドの例。
() 内に 仮引数: 型名 という形式で記述する。

def foo(a: Int): String = a.toString 
def bar(a: int, b: Boolean): String = if (b) a.toString else "false"

引数が 1 つのメソッドは、() の代わりにスペース区切りで呼び出すこともできる。

foo(1) // => String = 1
foo 1  // => String = 1