高階関数

高階関数を宣言する際には,関数パラメータが最後にあってカリー化されるときに許される,呼び出し側にとっては喜ばしい構文がある事を心に留めておくといいでしょう。例えば,これはSMLのfoldl関数です。

fun foldl (f: ('b * 'a) -> 'b) (init: 'b) (ls: 'a list) = ...

Scalaでは,この真逆が好ましいスタイルです。

def foldLeft[A, B](ls: List[A])(init: B)(f: (B, A) => B) = ...

関数パラメータを最後にすることで,呼び出し側の構文を次のようにできます。

foldLeft(List(1, 2, 3, 4))(0) { _ + _ }

この呼び出しで,関数値は括弧で囲われておらず,それゆえ関数値が関数そのもの(foldLeft)から分離しています。その簡潔さから,このスタイルは好ましいと言えます。

前のトピックへ

複数のパラメータリスト

次のトピックへ

フィールド

このページ

別のフォーマット

貢献