Posted at

LinqAliasってライブラリを作って公開した!

LinqAliasというライブラリを作って、公開しました。

LinqAliasは、C#においてLINQ to Objectsの一部メソッドのエイリアスを提供するライブラリです。

「他のプログラミング言語の開発経験があるけれど、C#はこれから使う初心者だよ!」という方の役に立つかもな、と思い開発しました。

GitHub : https://github.com/RyotaMurohoshi/LinqAlias

NuGet : https://www.nuget.org/packages/LinqAlias/


どんなライブラリ?

C#はLINQ to Objectsという素晴らしいコレクション関連の言語機能を持っています。

さて、このLINQ to Objectsのメソッド名は、他のプログラミング言語の経験がある人は奇妙に感じるかもしれません。

例えば、



  • Whereメソッドの公式ドキュメントの説明は「述語に基づいて値のシーケンスをフィルター処理します。」となっています。他の多くのプログラミング言語では、このようなメソッドはFilterという名前です。(選択)


  • Selectメソッドの公式ドキュメントの説明は「シーケンスの各要素を新しいフォームに射影します。」となっています。他の多くのプログラミング言語では、このようなメソッドはMapという名前です。(射影)

LinqAliasは、WhereSelectなどのLINQ to Objectsの一部のメソッドに、エイリアスを提供するライブラリです。

具体的には、



  • Mapメソッド : Selectメソッドのエイリアス。(内部的にSelectを呼び出す)


  • Filterメソッド : Whereメソッドのエイリアス。(内部的にWhereを呼び出す)

などです。これにより次のようなSelectWhereを用いたC#のコードが、

var resultArray = sourceArray

.Select(it => it * it)
.Where(it => it % 2 == 0)
.ToArray();

一部のプログラミング言語経験者に馴染みのあるMapFilterというメソッド名で同様の処理を記述できます。

var resultArray = sourceArray

.Map(it => it * it)
.Filter(it => it % 2 == 0)
.ToArray();


提供メソッド一覧


  • Filter : Whereのエイリアス

  • Map : Selectのエイリアス

  • FlatMap : SelectManyのエイリアス

  • ForAll : Allのエイリアス

  • Exists : Anyのエイリアス

  • Reduce : Aggregateのエイリアス

  • Fold : Aggregateのエイリアス


本当は・・・

「郷に入っては郷に従え」という言葉があります。

C#ではMapFilterではなく、SelectWhereなので、「他のプログラミング言語の開発経験があるけれど、C#はこれから使う初心者だよ!」という方にも、そちらを覚えて欲しいと実は思っています。

今後LinqAliasの亜種として、Filterを使うと「C#ではFilterじゃなくてWhereだよ」という警告を表示するやつも作ろうかと計画中です。

(Obsoleteで、メソッド利用箇所に警告を出せるけれど、該当メソッドがObsoleteな訳じゃないから、これを使うのはな・・・)


補足: WhereとSelectという名前の補足

C#においてLINQはクエリ構文というSQL風な記述ができます。その点を考えると、選択がWhereで、射影がSelectという名前は納得できますね。