連載改訂版 C#入門第12章 インデクサとプロパティ |
![]() |
12-8 好ましくない使い方
インデクサとプロパティは、うまく使えばプログラムを簡潔に記述することができて便利なのだが、一歩使い方を間違うと、トラブルのもとにもなる。
まず、List 12-9のサンプル・ソースを見ていただきたい。22〜25行目を見て、結果を容易に推測できるだろうか?
|
|
| List 12-9 |
このプログラムを実行するとFig.12-9のようになる。
![]() |
| Fig.12-9 |
つまり、結果は3になる。23行目の1と24行目の2が足されて3である。しかし、プロパティとは変数に見せかけた処理であるとすれば、この結果は直感に反する。つまり、24行目でプロパティに2を代入しているのだから、23行目で代入した1は消えてなくなって、2がオブジェクトの中に入ると考えるのが自然である。決して、24行目のコードから足し算が行われるとは読み取れない。確かに、Addというキーワードが足し算を連想させる言葉かもしれないが、誰もがそれだけで足し算を行うと連想できるわけではない。しかも足し算だと推理したところで、何と何を足すのかは、23〜24行目からは読み取れない。これらの問題から、プロパティをこのように使うのは好ましいことではないといえる。
これはList 12-10のように書くほうがベターといえる。
|
|
| List 12-10 |
このプログラムを実行するとFig.12-10のようになる。
![]() |
| Fig.12-10 |
ここでは、Addをプロパティではなくメソッドに変更している。メソッド呼び出しであれば、誰も変数のように振る舞うという予断を持たないので、メソッドの処理内容を確認するまでは、結果を推理しないだろう。一方、Valueのほうは、単なる内部変数の読み書きを行うだけなので、プロパティとして実装しても混乱することはない。むしろ、メソッドにするよりも、プロパティのほうが分かりやすくて好ましい。読み書き両用のプロパティValueがあれば、29〜30行目のような記述も可能になる。これは、誰が見ても処理内容が直感的に理解でき、非常に好ましい。
このような問題はプロパティだけでなくインデクサにも起こる。List 12-11がその例である。このプログラムがどんな数値を出力するか、ソース・コードから容易に読み取れるだろうか?
|
|
| List 12-11 |
このプログラムを実行するとFig.12-11のようになる。
![]() |
| Fig.12-11 |
List 12-11の中のインデクサは、配列型のように振る舞わない。このようなインデクサは、ソース・コードを読む者に混乱を与えるだけなので、記述すべきではない。定義をすべて読まないと挙動が推理できないとすれば、インデクサの価値はない。素直にメソッドを使うべきだろう。
『新プログラミング環境 C#がわかる+使える』本記事は、(株)技術評論社が発行する書籍『新プログラミング環境 C#がわかる+使える』から許可を得て一部分を転載したものです。 【本連載と書籍の関係について 】 この書籍は、本フォーラムで連載した「C#入門」を大幅に加筆修正し、発行されたものです。連載時はベータ版のVS.NETをベースとしていましたが、書籍ではVS.NET製品版を使ってプログラムの検証などが実施されています。技術評論社、および著者である川俣晶氏のご好意により、書籍の内容を本フォーラムの連載記事として掲載させていただけることになりました。 →技術評論社の解説ページ ご注文はこちらから |
| INDEX | ||
| 改訂版 C#入門 | ||
| 第12章 インデクサとプロパティ | ||
| 12-1 インデクサとは何か? | ||
| 12-3 インデクサを自作する | ||
| 12-6 プロパティを使う | ||
| 12-8 好ましくない使い方 | ||
| 「連載:改訂版 C#入門」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -






