前回はLangExtが何であって、何ではないのかを紹介しました。
今回は、シーケンスの概要について紹介します。
表記
ジェネリックの型パラメータを囲むかっこですが、山かっこではなく角かっこを使います。
ドキュメンテーションコメントをXMLで記述するC#では、山かっこは何かと不便なのが、角かっこを使う理由です。
ちなみに、Eiffel/Scalaの記法から拝借しました。
シーケンスとは
LangExtはLangExt.ISeq[T]
というインターフェイスを持っていて、これのことをシーケンスと呼びます。
シーケンスは、System.Collections.Generic.IEnumerable[T]
の代わりとなるインターフェイスです。
独自の型を作った理由は、単にIEnumerable[T]
が長ったらしい名前だからです。
その代償として、LangExtでは以下の物を捨てています。
- 他のライブラリとの直接の互換性
- IEnumerableを実装しているコレクションをLangExtで扱うこと
- yield return/yield break
- 配列をシーケンスとして(直接)扱えない
一つ目については次回紹介するToSeq
により、IEnumerable[T]
をシーケンスに明示的に変換可能です。
また、シーケンスはIEnumerable[T]
を継承しているため、変換せずにIEnumerable[T]
を要求する場所で使えます。
二つ目は、今後SeqExtという別ライブラリを提供予定です。
それまでは、既存コレクションをToSeq
するか、自分でISeq[T]
を実装したクラスを使うことになります。
三つ目はどうしようもない欠点となりえますが、名前の短さの方を取りました。
yieldを使いたい場合、System.Collections.Generic.IEnumerable[T]
版を作り、
それを呼び出して結果をToSeq
するしかありません。
四つ目もToSeq
するか、Create.Seq
(またはSeq.Create
)に渡すしかありません。
配列の扱いは、今後専用モジュールを追加する予定です。
次回
次回は、シーケンスの生成について紹介します。