クラスにはメソッドを定義できる。簡単な例からいこう。
scala> class Person(val name: String) {
| def hello(): String = {
| "Hello, I'm " + name + "!"
| }
| }
defined class Person
def で始まるのがメソッド定義だ。この例では引数をとらない hello メソッドを定義している。= を使うのがちょっと珍しい。
呼び出すには . (ドット)を使う。
scala> val andy = new Person("Andy")
andy: Person = Person@8d3da30
scala> andy.hello()
res0: String = Hello, I'm Andy!
メソッドの本体を { } で囲っているけど、これは一般には複数の式からなるから必要なのであって、メソッド定義の構文として必要なわけではない。言い換えると、メソッド本体が式一つだけなら { } はなくてもいい。こんなふうに。
scala> class Point(val x: Int, val y: Int) {
| def +(p: Point): Point = new Point(x + p.x, y + p.y)
| }
defined class Point
さらっと書いたけど、演算子がメソッドとして定義できるんだな。なんか条件とかあるんだろうか。
ま、とにかくこんなふうに使える。
scala> val p1 = new Point(1, 1)
p1: Point = Point@6b93c152
scala> val p2 = new Point(2, 2)
p2: Point = Point@cec7389
scala> val p3 = p1 + p2
p3: Point = Point@1514f0c2
scala> p3.x
res0: Int = 3
scala> p3.y
res1: Int = 3
今日は時間がないのでここまで。