はじめに
この記事では、Scala の変数定義、関数定義、関数リテラルを紹介します。
変数の定義
変数を定義する方法は2つあります。
1つはval
を使う方法、もう一つはvar
を使う方法です。
val
を使う方法で変数を定義すると、初期化後に再代入できない変数を定義することができます。
var
を使う方法で変数を定義すると、初期化後に再代入できる変数を定義することができます。
また、Scala には型を推論する仕組みがあり、大抵、型を省略することもできます。
順番に見てみましょう。
変数定義
object Main extends App {
val fruit: java.lang.String = "apple"
}
型を省略した変数定義
型を省略できることを確認してみましょう。
object Main extends App {
val fruit = "apple"
}
val で再代入できないことを確認
val
で初期化後に再代入できないことを確認してみましょう。(コンパイルエラーになります。)
object Main extends App {
val fruit = "apple"
fruit = "carrot"
}
var で再代入できることを確認
var
で初期化後に再代入できることを確認してみましょう。(コンパイルエラーになりません。)
object Main extends App {
var fruit = "apple"
fruit = "carrot"
}
関数の定義
関数の定義はdef
、関数名、(
、パラメータリスト、)
、:
、関数の結果型、=
、{
、関数の本体、}
からなります。Scala の関数定義は他の言語の関数定義とほとんど同じですが、関数の結果型がパラメータリストの後にあることや、イコール(=
)があることが目新しいかもしれません。
また、場合によっては、中括弧を省略したり、関数の結果型を省略したりすることができます。
順番に見てみましょう。
一般的な関数定義
object Main extends App {
def product(x: Int, y: Int): Int = {
x * y
}
println(product(3, 5))
}
中括弧を省略した関数定義
関数の本体が1文であるときに、中括弧を省略することができます。
object Main extends App {
def product(x: Int, y: Int): Int = x * y
println(product(8, 9))
}
関数の結果型を省略した関数定義
関数の結果型がUnit型であるときに、関数の結果型を省略することができます。(関数が値を返さないとき、つまり副作用を目的とした関数であるとき、関数の結果型がUnit型になります。)
object Main extends App {
def greet(name: String) { println(s"hello, $name") }
greet("Bob")
}
副作用があることを明示するために、手続き型プログラミングのように実装します。
関数リテラル
リテラル
とは、即値のことです。Scala には、整数リテラルの1
とか、文字リテラルの'a'
とか、文字列リテラルの"hoge"
とかと同じように、関数にもリテラルがあります。
関数リテラルは(
、パラメータリスト、)
、=>
、{
、関数の本体、}
からなります。関数と同じように、場合によっては、中括弧を省略することができます。(中括弧を省略する以外にも構文のパーツをいくつか省略することができます。)
また、関数リテラルを利用して、クロージャーを実装することができますが、この記事ではクロージャーについては紹介しません。
順番に見てみましょう。
一般的な関数リテラル
object Main extends App {
Seq(13, 8, 5).map((x: Int) => {
println(x)
})
}
中括弧を省略した関数リテラル
関数の本体が1文であるときに、中括弧を省略することができます。
object Main extends App {
Seq(13, 8, 5).map((x: Int) => println(x))
}
さらに省略した関数リテラル
レシーバがSeq(13, 8, 5)
であることから、関数リテラルのパラメータの型を推論することができるケースでは、さらに省略することができます。
object Main extends App {
Seq(13, 8, 5).map((x) => println(x))
Seq(13, 8, 5).map(x => println(x))
Seq(13, 8, 5).map(println)
}
まとめ
変数定義、関数定義、関数リテラルを紹介しました。
今回紹介した内容は基本的な構文なので、需要がないかもしれませんが、これから Scala を始める人に読んでいただければと思っています。
動作確認にはブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IOを利用しました。
参考
- Scala スケーラブルプログラミング [第2版]