今朝、 F# のインデントガイドライン という記事がアップされてました。大変興味深い内容だったんですが、ちょっと時間がなくて反応ができなかったんで、今やってしまおうと思います。
今回の概要としては、単純に「僕はこんなインデントルールでやってるよ!」という差分を紹介しよう、というものです。そのため、思想の一致を見るルールについては特に取り上げないこととします。
いきなりですが、僕は 4 スペースインデント派ですw この節は、それ以外に僕と意見が異なるところはありません。
複数行の if 式であれば、僕は次のように書きます。
if x = 0 then "zero"
elif x < 0 then "negative"
else "positive"
…キモいですか、そうですか。あ、 @kos59125 さんみたいなルールで書くこともあって、それは then 以下が単純かそうでないか、という違いですね。
パターンマッチ、僕は次のように書きます。
match x with
| 0 -> "zero"
| _ -> "not zero"
match .. with とインデントを合わせるスタイルです。そのため、
match x with
| 0 -> 0
| x when x < 0 -> -1
| _ -> 1
|> printfn "%d"
のように、パイプライン演算子に紛れて見えるかもしれません。それでさえも美しく見える病気の^H^H^H僕には特に問題ありませんが、あまりこういうコーディングにならないようにしている、というのもひとつのスタイルかもしれません。
function 式については、あまり僕がこれを書くことが多くないので、サンプルを集められませんでした。@kos59125 さんのように書くこともあれば、
let rec fac = function
| 0 -> 1
| n -> n * fac (n - 1)
というスタイルで書くこともあります。どちらかと言うと、@kos59125 さんスタイルが多いのかもしれません。
判別共用体の書き方では、僕は次のように書くことが多いです。
type Verbosity =
Quiet | Normal | Verbose
「何でやねん」「それ1行でおk」と言われそうですが、これ自体にそんなに意味もありません…orz
一貫性のあるルールはコードを後から読むときや、他の人に読んでもらう時に良いものです。一歩進んで「他の人にも読みやすい一貫性のあるルール」を採用したいものですね。本当にごめんなさい。