Kokudoriing

技術系与太話ブログ

プログラミングF#(オライリー)

読了。
さて、ようやくひと通り読み終えたので F# 勉強のスタートラインに立てたかな。
しかし F# は専門化された型がいっぱいありますね。
そして判別共用体+パターンマッチは美しいですね。感動。

というわけで色々 F# で遊んでいたのですが、いかんせんVisual Studioサポートがアレですね。
まぁしょうが無いとしか言いようが無いわけですが、特にIntelliSenseが辛い。
現在の文脈をコンパイラが理解しないとIntelliSenseが働いてくれないようで、
スクリプトを書きながらコンパイラが理解しやすいように書かないといけないというストレスが。
というかコンパイルエラーを察知したらIntelliSenseが止まるんですよね。(多分)
あと new Hoge(). の時点でIntelliSenseを呼ぶとお構いなしに全候補(モジュールやら何やら)出されて萎え萎え。

C# のIntelliSenseが気持よすぎるのでこのIntelliSenseっぷりだと移行したい欲が消えちゃいますね。(言い訳)
あとなんというか、F# は構文が複雑ですね。
キーワードの位置がちょっと変わると別の意味になってたり的なものが多いような印象。

あと seq や list 毎に Seq.map やら List.map やらがあってうへー。
型を意識して同じ意味で違う型の関数を使い分けなきゃいけないのは辛い。
map> と map> という感じに作っちゃダメだったんですかね。
seq と list で違う関数があるからモジュールでまとめたほうが一貫性があるとかそんなアレなのか、別の理由なのか。

そして F# はオフサイドルール適用してる言語なんですよねー。
個人的にはオフサイドルールあまり好きくないです。
楽なのでついついワンライナーで書いてしまいがちに。(言い訳)
そしてオフサイドルールってタブ派が・・。(PEP8でも空白推奨ですね)
F# はデフォでタブだとコンパイルすらしてくれませんね。泣いた。
あとはオフサイドルールだとコードスニペットとか難しそうですね。
ただ F# の場合は構文的にコードスニペット難しそうなので関係ない気もしますが。

しかしスクリプト(というか F# Interactive)はやっぱりでかいですね。
今までちょっとしたスクリプトを Ruby で書いてたんですが、これからは F# で書きたい所存。
(とか思って JavaScript 用に XHR とかあるので 簡易HTTPサーバ立てるスクリプト書こうとしたら、
HttpListener でポート(1024以上でも)をリッスンすると権限エラーで怒られて諦めてそこだけ Ruby のまま。)

最後にこの本についてなんですが。
ちょっと中途半端感があったというかなんというか。
対象読者に.NET経験求めてない割には C# との対比が多く書かれていたり、
でも.NET経験者を対象読者とすると対比が少なかったり。

あと説明のない関数をサンプルで使われてりして混乱したり。
(box 関数の説明が後半くらいに1行ほどちょろっとあったんですが、
本の前半くらいのサンプルに普通に box 関数出ていたり、その時注釈なかったり。)
特に F# だとそれが関数なのかキーワードなのか見分けがつきにくいので、
説明がないと初学者としては非常に心細かったです。

とアレ気なことばかり書いてますが、読んでて非常に楽しかったです。
表紙が鳥なことに好感が持てますね。

プログラミングF#

プログラミングF#