F# 4.0で入った地味だけど嬉しい機能紹介 #FsAdvent
この記事はF# Advent Calendar 2015の26日目の記事です。
通常のアドベントカレンダーは25日までですが、F# 界隈では英語版が31日まで続けているのにあわせて31日くらいまでやるっぽいです。
4.0の変更一覧
下記のページを見るのがてっとり早いです。
F# 4.0 Status · Microsoft/visualfsharp Wiki · GitHub
重めの機能でデザインとか背景とかを知りたい場合は以下。
fsharp/FSharpLangDesign · GitHub
こっちはvNextの草案も含めるみたいですね。
地味だけどうれしい機能紹介
F# 4.0はF# 3.0の時と比べると地味に見える変更が多い印象ですが、着実に改善されています。 というわけで、今回は私が地味にうれしいと思った機能を簡単に紹介していきます。
nth
が非推奨になりitem
が追加
ListやSeqモジュールにはnth
関数がありましたが非推奨になり、代わりにitem
関数が追加されました。
nth
にはListとSeqで引数の順序が異なる(Listのほうがパイプライン演算子に優しくない引数順序だった)という問題がありましたが、無事統一できるようになった形です。
F# 4.0でnth
を使うと警告がでます。
VS 2015を使っているとnth
はインテリセンスで一覧に現れないので注意しましょう。
units of measureが型変換なしでprintfできるようになった
このページの例を見ればどういう挙動なのか一目でわかります。
クラスのオブジェクト生成を関数のように扱える
xs |> List.map Uri
こういうコードが書けるようになりました。
StructuredFormatDisplayAttributeで複数のプロパティを利用できる
以下のように書けるようになりました。
[<StructuredFormatDisplay("My name is {First} {Last}")>] type Person = { First: string Last: string }
今までであれば、別のプロパティをわざわざ(型よってはこれだけのために)追加しなければならなかったので、楽になりますね。
isNull
関数の追加
.NETライブラリをラップするときになんだかんだお世話になりそうです。 あとstringでもお世話になってます。
終わりに
ところで、色々なライブラリはいつのタイミングで4.0に移行するのでしょうかね…?