LangExt2.0 リリースしました

しました。

メジャーバージョンが上がって、1.xとは互換性のないものになっています。 そこらへんについては、「なぜそうしたのか」等をまとめて公開していくつもりです。

で、リリースしておいてなんですが、使用にあたっていくつかの注意点があります。

  1. 標準クエリ演算子(SelectとかWhereとか)を捨ててます。ふつうのC#erにはお勧めしません。
  2. Grouping系のメソッドは未実装です。実装できてないものがいっぱいあって、それを使って実装したいのでまだありません。いつか作ります。
  3. Join系のメソッドは未実装です。え、これ、必要・・・?
  4. Lenはおとーふさんの要望により、Lengthになるかもしれません。自分としてはLenで十分だと思うのですが・・・ → LenはLenのままで、より汎用的に使える名前であるSizeを追加することになりました
  5. なんとかWithIndex系のメソッドはなくなる可能性があります。結果をMapする関数を受け取る版を作った方が、色々と柔軟なのでは、と思ったので。そっちも用意しつつ、なんとかWithIndex系のメソッドも残す可能性もあります。議論が必要です。

注意点はこんなところです。

LangExtって何?

C#での関数プログラミングをサポートするためのライブラリです。 無理やり感ありますし、F#だったら・・・!と思うこともよくあるのですが、そこは諦める感じでお願いします。無理です。

もっと知りたい人は、コードを読むか、 https://github.com/LangExt/LangExt/blob/master/doc/LangExt.markdown あたりをどうぞ。

あ、一応これ、仕事で使う用のライブラリでもあります。 実際に仕事で発生した問題に対応するためのあれこれが入っています。

なぜ○○は××になってるの?

今後、まとめていく予定です。現在予定している項目としては、

  • なぜ標準クエリ演算子を捨てたのか?
  • なぜIEnumerableを捨てたのか?
  • Optionの実装はなぜああなっているのか?→書いた
  • EitherではなくResultにしたのはなぜか?(もしくは、1.xではEitherだったのに、2.0ではなぜResultにしたのか?)
  • タプルを独自実装から標準ライブラリのものにしたのはなぜか?
  • 拡張メソッドとインスタンスメソッドはどう使い分けているのか?
  • OptionやUnitは、F#の型をそのまま使うのではいけなかったのか?

です。 LangExtに限った話だけでなく、C#の言語寄りの話も盛り込むと思います。

今後の予定

GitHubのマイルストーンあたりを見ていただければ大体わかるかと。

あと、LangExt以外にもなんとかExtをいくつか作る予定です。 そのあたりは、LangExt (LangExt) · GitHubからたどって情報を拾ってください。