🔰

F#でやりがちなミスの個人的ランキング

2024/12/15に公開

この記事は、F# Advent Calendar 2024の14日目の記事です。

1位 コレクションの要素区切りを間違う

C#など多くの言語はカンマ、F#はセミコロン(あるいは改行)なので、普通によく間違います。
もちろん、型推論など状況によりエディタが指摘してくれるももの、例えば、整数のリストのつもりで[1, 2]と書いてしまった場合

[1, 2]
// >> val it: (int * int) list = [(1, 2)]

というように、タプルを1個含むリストとして正当なので、気づくのに遅れることがあります。

2位 ラムダ式の構文を間違う

これは、自分がF#以外で使っている言語がC#とPower Queryくらいで、双方とも
(input-parameters) => expression
なのに対し、
F#は、
fun parameter-list -> expression
なのが原因と思います。
特にfunキーワードを書き忘れちゃうことが多いです。

3位 演算子を間違う

代入

let mutable count = 0  // これを1増加させたい
count <- count + 1  // これはOK
count = count + 1  // 間違い。(falseと評価される)

上記の例のように自分でmutableで宣言した変数の場合、派手な色(Visual Studioのデフォルトならオレンジ)でハイライトされるので、そもそも、mutableを使うことが少ないことも相まってそんなに間違えないのですが、外部ライブラリの可変のプロパティに代入するときになどはうっかり=を書きがちです。(大抵、使用例がC#など代入が=の言語で書かれていることが多いので、そのあたりも間違いやすい要因になっているかも)

ビットシフト

多くの言語では<<>>ですが、これらはF#では関数合成の演算子なので、<<<>>>のように3連にする必要があります。

(番外編) ファイルを名前順に並べようとしてしまう

これは、C#から移ってきたときに最初にやらかしたことですが、プロジェクト内のファイルをC#で表示されるときと同じように、ファイル名で並べかえて、それで動かなくなって「?」となってました。
今でこそ「何やってんの自分」と思いますが、そのときは、「ソリューションエクスプローラーがぶっこわれた!」とか本気で思ってました(笑)

F#は原則前方参照なので、コード(ファイル)の並び順に意味があります。一見窮屈な制約のように思えますが、依存のコントロールがしやすいというメリットがあります。
たとえば、ドメインレイヤーのコードは最初のほうに書くようにすればいいわけですね。

最後に

最後までお読みいただきありがとうございます。
F#使いの方には、「あるある」「ね~よ」どちらでも、もし楽しんでいただけたら幸いです。
色々書きましたが、F#は構文が軽量、型推論も強力で、むしろミスをしにくく、開発を楽しめる言語だと思います。
カンスウガタゲンゴ コワクナイ トモダチ...
使用者が少ないことだけがネックなので、少しでも興味が湧きましたら、是非、使ってみてください。

Discussion