0
0

More than 5 years have passed since last update.

最近流行のカリー化について書いてみます。

とは言え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になっちゃいました。。
以上ですー。

カリー化については自分も初心者なので
間違っていたらツッコミ待ってます!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0