2010年5月25日火曜日

番外編 拡張メソッドを使ってみる

ちょっと新しく作り直しているところがいろいろ躓いているので、
しばらく小ネタでつないでみたいと思います。
トピック作ってまで書くほどことではないかもしれませんが、
他に書くことがないので。。

今日使ってみるのは『拡張メソッド』。
既存のクラスにメソッドを追加できます。
といっても、クラスの内部(privateメンバとか)にアクセスできないので、
クラスにメソッドが『追加されたかのように見せる』機能のイメージですね。

この機能は以下の2つの理由であまり多用しない方がいいような気がします。
・本来のクラスと別の場所にコードがあるので、探しにくくなる
・本来持っていないメソッドが存在するようになるので、
 この機能に慣れてない人が、拡張メソッドが使われているところを読むと『???』となる可能性がある


ですが使い方によっては、ちょっとした手間でコードを読みやすくできそうです。


たとえば、以下のようなコードがあったとします。


if (string.IsNullOrEmpty(filename)) {


ここで以下のような拡張メソッドを作ると


 public static class StringExtension {
  public static bool IsNullOrEmpty(this string text) {
   return string.IsNullOrEmpty(text);
  }

以下のように書けます。


if (filename.IsNullOrEmpty()) {


後者の方が英語としてすんなり読めますよね?

このように、stringのような自分では手を加えられないクラスに、
拡張メソッドによってメソッドを追加することにより、
読みやすいコードを書くことができるようになります。

まぁ人によってはあんまり効果があると思わないかもしれませんが、
ロジックが複雑になってif分の中がごちゃごちゃしてくるほど
この若干の読みやすさの差がだいぶ効いてくるような気がします。

今後の記事で時々出てくるかもしれないので紹介してみました。

2 件のコメント:

  1. bool filenameEnpty = string.IsNullOrEmpty(filename);
    if (filenameEnpty)

    ...みたいな書き方はよくします。

    返信削除
  2. よほどシビアな環境ではないかぎり、
    まぁ好みの問題かと思います。^^;

    頻出するなら拡張メソッド使うとタイプが楽になりますが、
    たまにしか出てこないなら拡張メソッド作るほうが大仰な感じですし。

    返信削除