LoginSignup
0
0

More than 5 years have passed since last update.

Ceylonの型合成(Union Type) 機能

Posted at

あまりにマイナーでライブラリやフレームワークの紹介も出来ないので
ネタ切れになりそうですがアドベントしています。。

今回は合成型について。

たまーにですが2つの型を同じ入れ物に入れたいって時がありますよね?
そんなときはこんな感じで使えます。


    List<String|Integer> list = LazyList{ 1, "two" , 3 };

「 | 」で結合するとその型を両方使うことを表すことが出来ます。
今回のコードではListにIntegerもStringも入れることが出来るようになります。

Javaであればこのようになってしまうと


 List<Object> list;

のようにObjectになってしまいます。
Ceylonであればそんなことは無く、何の型が入るかはっきり表現することが出来ます。

さてListに入ったオブジェクトの使い方ですが、
このまま取り出すとそのオブジェクトがIntegerかStringにしぼられているとはいえ
どちらか分かりません。

なので使うときは以下のようになります。


    for(e in list) {
        if(is String e) {
            // ここでStringのメソッドが使える
        }
        if(is Integer e) {
            // ここでIntegerのメソッドが使える
        }
    }

はい。ちゃんと型チェックしてやる必要があります。
こちらの記事 でも書きました。
未チェックな人はチェックしてみてくださいー。

今回のListのケースは既に設計がイマイチ感がありますが
現場ではもっと適切に使える機会もありそうな合成型でした。

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