Scala/関数
戻り値の型は省略可能。再帰的な場合は省略不可。引数の型は省略不可。
戻り値は、最後に評価した結果。
引数なしのメソッドの場合、一般的に推奨される慣習では、副作用がある場合は()を付ける
def greet() = println("Hello, world!")
def max(x: Int, y: Int): Int = { if (x > y) x else y }
アクセス修飾子のデフォルトはpublic。privateはクラス外からのアクセスを防ぐ。 publicメソッドは結果型を明示的に提示することを推奨する。
override def toString = n + "/" + d // デフォルトはjavaのObjectクラスのtoStringを呼び出す
標準ライブラリに対しメソッドを定義したい場合、暗黙の型変換で同じようなことができる。
implicit def intToRational(x: Int) = new Rational(x) // 2 * rをしたいときに、2をIntからRationalに変換できる。
連続パラメータを使えば、可変長引数リストを渡せる。
def echo(args: String*) = for (arg <- args) println(arg) // 0個以上のString引数
この引数は内部的にはArray型だが、引数にArray型を指定するとエラーになる。
val arr = Array("What's", "up", "doc?")
echo(arr) // エラー!
echo(arr: _*) //OK!1個の引数として渡すのではなく、個々の要素を渡すようになる
デフォルト引数値との組合せで使われることが多い。
def speed(distance: Float, time: Float):Float = distance / time
speed(time = 10, distance = 100) // 引数の順序を変えられる
def printTime(out: java.io.PrintStream = Console.out, divisor: Int = 1) =
out.println("time = " + System.currentTimeMillis() / divisor)
printTime(out = Console.err)
printTIme(divisor = 1000)