2016年6月2日木曜日

[C#] indexer(インデクサー)とyield(リファレンス)

こんにちは。明月です。
今日はindexer(インデクサー)とyield(リファレンス)について勉強します。
indexerとyieldの場合は他の言語にはない文法です。なので少し理解が大変だと思われることもできるが以外に簡単だしよく理解して利用すればプログラム品質があがることにもできると思います。


indexer(インデクサー)


indexerはクラスを配列みたいに宣言するように使用するキーワードです。





上の例をみるとクラスを配列みたいに使っています。でも内部は本当の配列の構造になっていません。ただ、クラスを使用方法で配列みたいに宣言することで見やすくなることなので性能には影響がありません。


yield


yieldの場合はデザインパタンの「interator」パタンと関係があるキーワードです。
「interator」パタンは繰り返す的なデータ集団を一つずつに分離してデータを取り出しするパタンをいいます。普通のリストでデータを取り出す型は下記とおりです。



上の例をみると外部で「ListTest」クラスのメンバ変数「list」からデータを取得するようにはメンバ変数自体を返却するかインデックスを受け取って返却するかの一つです。
初めの方法でメンバ変数「list」を返却することですが、そうすればOOPの特性のカプセル化の意味がなくなります。実際に実装する形は2つ目ですが、インデックスを計算するようにリストの内部関数を連携して作成すべきです。(adapterパタン - リスト個数関数、リスト削除関数、リスト取得関数等)




上の例を見るとリストを返却することではなく、IEnumerableタイプを返却します。それでクラス内のリストと外部クラスで呼び出したリストのオブジェクトを分離しています。


初めに説明したとおりにindexer,yieldは他の言語にはないキーワードです。(筆者が知ってる言語中では。)それで開発する間によく使うキーワードではないと思います。それでもよく認識して使えば可読性が上がると思うのでよく覚えていきましょう。

0 件のコメント