Edited at

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

More than 5 years have passed since last update.

前回は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)に渡すしかありません。

配列の扱いは、今後専用モジュールを追加する予定です。


次回

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