Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@newta

Ceylonでカリー化処理

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?