LoginSignup
1

More than 5 years have passed since last update.

LangExtの紹介 - シーケンスの概要

Last updated at Posted at 2013-05-22

前回はLangExtが何であって、何ではないのかを紹介しました。

今回は、シーケンスの概要について紹介します。

表記

ジェネリックの型パラメータを囲むかっこですが、山かっこではなく角かっこを使います。
ドキュメンテーションコメントをXMLで記述するC#では、山かっこは何かと不便なのが、角かっこを使う理由です。
ちなみに、Eiffel/Scalaの記法から拝借しました。

シーケンスとは

LangExtはLangExt.ISeq[T]というインターフェイスを持っていて、これのことをシーケンスと呼びます。
シーケンスは、System.Collections.Generic.IEnumerable[T]の代わりとなるインターフェイスです。

独自の型を作った理由は、単にIEnumerable[T]が長ったらしい名前だからです。
その代償として、LangExtでは以下の物を捨てています。

  1. 他のライブラリとの直接の互換性
  2. IEnumerableを実装しているコレクションをLangExtで扱うこと
  3. yield return/yield break
  4. 配列をシーケンスとして(直接)扱えない

一つ目については次回紹介するToSeqにより、IEnumerable[T]をシーケンスに明示的に変換可能です。
また、シーケンスはIEnumerable[T]を継承しているため、変換せずにIEnumerable[T]を要求する場所で使えます。

二つ目は、今後SeqExtという別ライブラリを提供予定です。
それまでは、既存コレクションをToSeqするか、自分でISeq[T]を実装したクラスを使うことになります。

三つ目はどうしようもない欠点となりえますが、名前の短さの方を取りました。
yieldを使いたい場合、System.Collections.Generic.IEnumerable[T]版を作り、
それを呼び出して結果をToSeqするしかありません。

四つ目もToSeqするか、Create.Seq(またはSeq.Create)に渡すしかありません。
配列の扱いは、今後専用モジュールを追加する予定です。

次回

次回は、シーケンスの生成について紹介します。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1