Scala には配列(Array)とリスト(List)がある。
Array は ミュータブル、つまり変更ができるけど、List はイミュータブル、つまり変更ができない。これは値としてそうなのであって、変数の var と val の違いではないので注意。
Array
Array から見ていこう。次のように作る。
scala> val arr = Array(1, 2, 3, 4, 5) arr: Array[Int] = Array(1, 2, 3, 4, 5)
Array は型変数を持つ。要素の型だ。上の例では書かなかったけど、型推論が働いて要素の型が Int になっている。ちゃんと書くならこうなる。
scala> Array[Int](1, 2, 3, 4, 5) res0: Array[Int] = Array(1, 2, 3, 4, 5)
Array の要素の参照には ( ) を使う。多くの言語では [ ] を使っているのとちょっと違う。インデックスは 0 から。
scala> arr(3) res1: Int = 4
Array はミュータブルなので、要素を書き換えることができる。
scala> arr res2: Array[Int] = Array(1, 2, 3, 4, 5) scala> arr(0) = 7 scala> arr res4: Array[Int] = Array(7, 2, 3, 4, 5)
0 番目の要素が 7 に書き換わっているのがわかる。
と、いうのが Array なわけだけど、Scala では Array よりも List のほうを多用するらしい。
List
List は Array と似ているけど、イミュータブルなので要素の変更ができない。
scala> val lst = List(1, 2, 3, 4, 5) lst: List[Int] = List(1, 2, 3, 4, 5) scala> lst(0) res5: Int = 1 scala> lst(0) = 7 <console>:13: error: value update is not a member of List[Int] lst(0) = 7 ^
作り方も、要素の参照の仕方も Array と同様だけど、要素を書き換えようとするとエラーが発生する。
List は変更はできないけど、メソッドを使って新しい List を作ることができる。このへんは関数型プログラミングらしく、次々に新しい List を作りながらプログラムを組み立てるようだ。いろいろメソッドがあるみたいだけど、今日のところはこのへんで。