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
は、Where
やSelect
などのLINQ to Objects
の一部のメソッドに、エイリアスを提供するライブラリです。
具体的には、
-
Map
メソッド :Select
メソッドのエイリアス。(内部的にSelect
を呼び出す) -
Filter
メソッド :Where
メソッドのエイリアス。(内部的にWhere
を呼び出す)
などです。これにより次のようなSelect
・Where
を用いたC#のコードが、
var resultArray = sourceArray
.Select(it => it * it)
.Where(it => it % 2 == 0)
.ToArray();
一部のプログラミング言語経験者に馴染みのあるMap
・Filter
というメソッド名で同様の処理を記述できます。
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#ではMap
・Filter
ではなく、Select
・Where
なので、「他のプログラミング言語の開発経験があるけれど、C#はこれから使う初心者だよ!」という方にも、そちらを覚えて欲しいと実は思っています。
今後LinqAlias
の亜種として、Filter
を使うと「C#ではFilter
じゃなくてWhere
だよ」という警告を表示するやつも作ろうかと計画中です。
(Obsoleteで、メソッド利用箇所に警告を出せるけれど、該当メソッドがObsoleteな訳じゃないから、これを使うのはな・・・)
補足: WhereとSelectという名前の補足
C#においてLINQはクエリ構文
というSQL風な記述ができます。その点を考えると、選択がWhere
で、射影がSelect
という名前は納得できますね。