delegation)機能について、今まで文法的には理解していつつも使い所がイマイチわかっていなかったんですが、今回一つの使い所がわかったので紹介します。余談ですがクラス委譲という呼び名の他に、インターフェース委譲という呼び名もあるようです。意味的にはそちらのほうがしっくり来ますが、よく聞くクラス委譲という呼び名をここでは採用します。詳細は前述の本家ドキュメントに書かれているので、ここでは超簡単に紹介します。以下のようなやつです。注:頭に入ってきやすくするためRepository,Service等の命名をしていますが、本来的にはこういう単にコード行数を短くするためだけにクラス委譲を使うのは実装として微妙だと思います。結論から言うと、ライブラリにあるインターフェースを継承し、何かしらの機能拡張したクラスを作るケースが一つの使い所になると思います。標準ライブラリにあるListインターフェースを継承したIdListクラスというものを独自で作って、ただのList<Int>とは違った挙動にしたいと考えたとします(Idならではの制約を入れたり、新しいメソッドを生やしたり...etc)。以下のように書くと当然コンパイルエラーになります。List<Int>Listインターフェースに定義されている必要なメソッドがないからですね。//LinkedListを使っているのに深い意味はない。emptyListOfだとList<Int>型になり、後の説明でややこしくなるため。}}・・・思いの外長くなってしまいました。(正直筆者も夜中にこれを書いていて、何をやっているんだろうという気になりました)この中のどれが独自メソッドで、どれがIdListならではの特殊な処理を行っているメソッドなのか、パッとはわからないですね。ときめかないので、こんまりしましょう。クラス委譲を使います。idList見事キレイに掃除が完了しました。考察このクラス委譲という機能は自身が拡張機能として書きたいロジックに集中するための機能だという理解をしています。LinkedList<Int>のものをそのまま使い、自身で定義したいロジックだけを追加で定義することができます。クラス委譲の名前のとおり、基本的な振る舞いはidListインスタンスに委譲しているわけですね。requestStockLike12@doyaaaaakenSaaSスタートアップでサーバサイドKotlinやVue.jsを書いている人。smartroundというベンチャーファイナンス業務を効率化するサービス作ってます。frameworkのKtorのドキュメント日本語翻訳プロジェクトの発起人です。upLoginユーザーは見つかりませんでした。