はなちるのマイノートスマートフォン用の表示で見るはなちるのマイノートUnityをメインとした技術ブログ。C#Tweetはじめにこんにちは、先日松屋の横にスライドするドアを必死に押して開けようとしていたはなちるです。最近ネットサーフィンをしていてこのような記事を見つけました。qiita.com見てみると非常に興味深かったです。ここは気を付けなきゃと感じたところ備忘録の意味合いもかねて少し抜粋してみたいと思います。はじめにインターフェイスについてリストの継承関係についてメソッドに引数メソッドの返り値あくまで目印さいごにインターフェイスについて本題に入る前に少しだけインターフェイスの話をさせてください。インターフェイスには一般的により上位なインターフェイスほどできる機能が少ないという性質があります。簡単な一例をみてみましょう。メモ書き表の上の方が上位,下の方がより下位なインターフェイスです。(Listは普通のクラスですが)これをみてもやはり上位のインターフェイスの方ができることが少ないことが分かりますよね。いえば当然なのですが、これがタイトルにあるような配列やListを使うのがあまり適切でないという状況を生みうる大きな理由になります。リストの継承関係について最初に紹介した記事をめちゃくちゃ参考にさせていただいて以下の画像を作ってみました。この図の上にあるほど上位なインターフェイスになります。このような紹介をしたかというと、インターフェイスには以下のような重要な性質があるからです。はなちるのマイノートつまりはこういうことですね。list;これを踏まえて今回一番伝えたいメソッドの引数・返り値について掘り下げていきたいと思います。出来る限り上位のインターフェースにすると良いです。list)例えば要素を追加・削除をしてほしくないのに、引数がListだと勝手に追加されてしまう可能性がでてきてしまいますよね。(分かりやすさのためこう書きましたがやや語弊があるので後述にて言い直します)なのでメソッド内で行う処理に必要最低限必要な機能を備えた引数にすることは大切になります。出来る限り下位のインターフェースにすると良いです。Hoge()メソッドの返り値でIEnumerableなどにして機能に制限をかける必要はほぼないと思います。こちらは深く考えずにListとかを返しちゃいましょう。目印メソッドの引数・返り値について紹介しましたが、IEnumerableにはLINQと言われる強力な拡張メソッドが存在します。このLINQを用いることで要素の順番なども楽々扱うことができてしまうのです。はなちるのマイノートというかキャストも可能なのでIReadonly〇〇と書いてありながらやろうと思えばやりたい放題できます。そこは本質ではなくて、メソッドの名前や引数,返り値等(メソッドシグネチャ)を見ることで中でどのような処理が行われているのかを分かりやすいようにすることが大切だということです。メソッド内でリストに要素を追加・削除をしないのに引数をListにしてしまうと、メソッドを使う人はもしかして要素が変更されるのではないかという不安を持ってしまうことになります。最小限の機能だけにすることで安心をさせてあげましょう。いう私自身も上手くできなくていつも悩んでいるのですが...。さいごにただIEnumerable(LINQも)を扱うときは遅延評価という少し変わった挙動をするので注意が必要です。慣れてくるまではIReadonlyList,IReadonlyCollectionあたりを使うと良いかもしれませんね。今回は読み取り専用のコレクションをIReadOnlyCollect...突然ですがUnityオススメ記事20選!というサイトを作ったのでプチ宣伝。はてなブログProUnityをメインとした技術ブログ。(9)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。