前回 はJavaのHTTPサーバを作った流れでここまで書いてない記述方法で
Ceylonのコードを書いてました。
その解説などをしてみようと思います。
#関数の内容が1行の時の書き方
まず普通の関数です。
void hello() {
print("hello world!");
}
普通にコンソールにhello worldが出力されるコードです。
関数内容が1行のときは宣言をこのようにも出来ます。
void hello() => print("hello world!");
記述が簡単になりますね。
クラスのメソッドのときにもこのような記述方法が使えるので
オーバーライドの時やメソッド引数に単純な関数を渡すときにはよく使われます。
scalaでもよくある記述ですねー。
#名前付き引数での呼び出し
このような関数があるとします。
Integer sum(Integer x, Integer y) {
return x + y;
}
普通に呼び出すときはこうですね。
Integer answer = sum(1 , 2);
名前付き引数で呼び出すと
Integer answer = sum { x = 1 , y =2 };
こんな感じで呼び出せます。
括弧が変わっているのにちょっと注意。
名前付きであれば順番が反対になっていても大丈夫です。
Integer answer = sum { y = 1 , x =2 };
ただメソッドを呼ぶだけのときはあまり使わないかもしれませんね。
でも、コンストラクタ呼び出しのときも同様に名前付き引数を使えます。
前回の記事 のときにも使っていました。
場合によって使い分けたら良いかなーと思います。
この辺もscala使いの人にはすでにお手の物かもしれませんね。
#タプル
なんかバリューオブジェクトのクラスを新しく作るほどでもないけど
メソッドで複数値を返したくなるときってたまにありますよね?
Javaだとその辺かなり堅いのでクラスを作るか
ListとかMapとかって言うダメな戻り型を指定して
作ってしまう場合があります。
そんなときに使えるタプル。
[Integer, String , Integer, Float] tuple() {
return [1 , "TWO" , 3 , 4.0];
}
こんな感じで返せます。
Listとかで返してたときは型が消えてしまっていましたが
そんなことも無いし、使うときはこんな感じです。
value result = tuple();
print(result[0]); // 1
print(result[1]); // TWO
print(result[2]); // 3
print(result[3]); // 4.0
まあこれもscalaな人にはおなじみですね。
ただscalaと違うのは
scalaではtuple22問題があって
最大22個の要素までしかタプルを作れず
23個以上の要素を持ったタプルを作ることが出来ませんが
Ceylonでは要素が23個以上でも作ることが出来ます!ヤッター!
(でも普通そんなに使わないけどね。。。)
#まとめ
今回はscalaとかの関数型言語で普通によくある
表現や機能がCeylonでも使えるところを紹介してみました。
Scalaをやりたい人もJavaに似た記述のCeylonを使ってみてから
Scalaをすると機能を順番に理解出来るかもかも?
そんな感じでまた次回。