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の型合成(Union Type) 機能

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

今回は合成型について。

たまーにですが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のケースは既に設計がイマイチ感がありますが
現場ではもっと適切に使える機会もありそうな合成型でした。

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?