Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

関数型言語でより抽象化が進むんだなあ

関数型言語ど素人です。
多忙な 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でいう引数にインターフェースを定義するよりももっと抽象化が進んでる感じ??