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ではクラス名やインターフェイス別名で扱うことが出来ます。

インターフェイスのエイリアス


interface Strings => Set<String>;

こんな感じで定義するとStringsと言う名前でSetが使えます。

継承している訳ではないのでダウンキャストとする訳ではないので
それぞれの型の変数に相互に入れることが出来ます。
こんな感じで。


    variable Set<String> set1 = LazySet {};
    Strings set2 = set1;
    set1 = set2;

まあ、あまりに入り交じってしまうと
エイリアスを定義してる意味がなくなってしまうかもしれませんけど。

クラスのエイリアス


class StringList({String*} strs) => LazyList<String>(strs);

クラスのエイリアスはこんな感じです。
コンストラクタなどの定義はそのまま引き継いで設定する必要があります。

本当にエイリアス

Ceylonには本当にaliasというキーワードがあります。
使い方はこんな感じ。


alias Strings => List<String>; // インターフェイスのエイリアス

alias Strings2 => LazyList<String>; // クラスのエイリアス

クラスはコンストラクタのパラメータをセットする必要がなくなったので
ちょっと手軽になったかも。

インターフェイスの別名の違いは
interfaceのキーワードでは1つのインターフェイスしか指定出来ませんが、
aliasでは合成型を指定することが出来ます。

単純に別名を付けるときはこっちの方が良いかも?

まとめ

エイリアスの利用イメージはつきましたか?
スコープも合わせて考えれば便利?

そんな感じでした。

便利な使い方とか実践的な使い方の例とかがあったらぜひ教えて下さい。

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?