最近流行のカリー化について書いてみます。
とは言えCeylonが特別って感じでもなく
JavaScriptやScalaな人には普通かも知れないですけど、
Javaな人とかはサラッと見てもらえたらなーと。
ということでCeylonもカリー化処理出来るのです。
まずは普通にメソッド定義
shared Integer sum(Integer x, Integer y) {
return x + y;
}
普通こんな感じですね。
早速定義を変えてみます。
shared Integer sum(Integer x) (Integer y) {
return x + y;
}
どこが変わっての?って思うかもしれませんが
引数が2つの状態から引数1つのパラメータが2回定義されています。
これの呼び出し方法は?
int ans = sum(1)(2);
こんな感じになります。
void run () {
Integer(Integer)(Integer) method0 = sum;
Integer(Integer) method1 = method0(1);
print(method1); // -> Integer()
Integer h2 = method1(2);
print(h2); // -> 3
print(method1(3)); // -> 4
}
こんな感じに1つずつ渡して行くことも出来ます。
じゃ、何が嬉しいか?
って言うと、良くあるのが
1つ目の呼び出しのときにはWriterを渡して、
2つ目の呼び出しの書き出す内容を渡します。
出力ストリームを渡す処理と書き出す処理を別の場所で行うときも
メソッド内で集約された形で書くことが出来たりします。
便利!!
実はこういう話はScalaの本とかに載ってたりします。。
Ceylonの本は今のとこないので、Scalaの本とかを読んでみると良いかも。
Ceylon押してるはずなのにScalaになっちゃいました。。
以上ですー。
カリー化については自分も初心者なので
間違っていたらツッコミ待ってます!