連載:[完全版]究極のC#プログラミング

Chapter3 新しい繰り返しのスタイル ― yield return文とForEachメソッド

川俣 晶
2009/08/31

3.3 C# 1.xによるRangeクラスの実装

 まず、C# 1.xでRangeクラスを作成してみよう(リスト3.1参照。実際にはVisual Studio 2008でC# 2.0/3.0の機能を使わないで記述し、動作を確認している)。一応、正攻法で記述してみたのでかなり冗長になっている(列挙関係のインターフェースを明示的に実装すれば、もっと文字数は増える)。

using System;

class RangeEnum
{
  private int current, to;

  public bool MoveNext()
  {
    current++;
    return current <= to;
  }

  public int Current
  {
    get { return current; }
  }

  public RangeEnum(int from, int to)
  {
    current = from - 1;
    this.to = to;
  }
}

class Range
{
  private int from, to;

  public RangeEnum GetEnumerator()
  {
    return new RangeEnum(from, to);
  }

  public Range(int from, int to)
  {
    this.from = from;
    this.to = to;
  }
}

class Program
{
  static void Main(string[] args)
  {
    foreach (int i in new Range(0, 9))
    {
      Console.Write("{0} ", i);
    }
    // 出力:0 1 2 3 4 5 6 7 8 9
  }
}
リスト3.1 C# 1.xによるRangeクラスの実装

 このコードで目立つ“うっとうしい”部分は次の2つだろう。

  • Rangeクラスのほかにもう1つRangeEnumクラスがあり、クラスを2つも書くのはうっとうしい
  • 列挙するためにMoveNextメソッド、Currentプロパティ、状態を記憶しておくフィールドcurrent、終了条件を保存しておくフィールドtoとたくさんのものを書くのはうっとうしい

 このうっとうしさが、列挙可能なオブジェクトを自作するうっとうしさそのものといえる。


 INDEX
  [完全版]究極のC#プログラミング
  Chapter3 新しい繰り返しのスタイル ― yield return文とForEachメソッド
    1.3.1 「繰り返し」という古くて新しい問題
    2.3.2 数を数えるというサンプル
  3.3.3 C# 1.xによるRangeクラスの実装
    4.3.4 C# 3.0によるRangeクラスの実装
    5.3.5 yield break文による中断
    6.3.6 yieldは予約語ではない
    7.3.7 1つのクラスに複数の列挙機能を付ける
    8.3.8 自動的に作られるオブジェクトと二重利用
    9.3.9 catchできない制約
    10.3.10 制約の真相―見た目と違う真実の姿
    11.3.11 ForEachメソッドを使う別解
    12.3.12 性能比較
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間