関数型言語ど素人です。
多忙な Java 開発者のための Scala ガイド: オブジェクト指向のための関数型プログラミング
object HelloArguments { def main(args: Array[String]): Unit = { args.filter( (arg:String) => arg.startsWith("G") ) .foreach( (arg:String) => Console.println("Found " + arg) ) } }
関数が引数に関数をとる。
だから定義した時点では処理は抽象化されてる。
実際に実行するときにどんな関数を引数に渡すかで処理が変わる。
言語仕様としてすべてが式だったとこも関連してくるね。
Arrayクラスのfilter()メソッドとforeach()はこう定義されてる。
filter (p : (A) => Boolean) : Array[A]
foreach(f : (A) => Unit) : Unit
Javaでいう引数にインターフェースを定義するよりももっと抽象化が進んでる感じ??