Skip to content

Instantly share code, notes, and snippets.

@pocketberserker
Last active December 15, 2015 02:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pocketberserker/5186409 to your computer and use it in GitHub Desktop.
Save pocketberserker/5186409 to your computer and use it in GitHub Desktop.

「「F# のインデントガイドライン」に寄せて」に寄せて

今朝、 「F# のインデントガイドライン」に寄せて という記事がアップされてましたので、便乗します。

単純に「私はこんなインデントルールでやっています」というオレオレを書いておきたいだけです。大元の F# のインデントガイドライン と一緒のものについては省略します。

インデントの基本ルール

個人開発では2スペースインデントで、FSharpxを触るときは4スペースインデントです。

if式

elifを使うときは @gab_km さんみたいなルール、それ以外のときは if 式の長さで決めています。

パイプライン演算子にあわせて、

let funfunfun hoge b =
  hoge
  |> huga
  |> piyo
  |> foo
  |> if bar then List.cons b else id

としたりすることも稀にあります。よほどのことがないとこの状況に遭遇しないとは思いますが・・・。

パターンマッチ

パターンマッチは次のように書いています。

let funA x =
  match x with
  | 0 -> "zero"
  | _ -> "not zero"

function 式については、個人開発では

let rec fac = function
| 0 -> 1
| n -> n * fac (n - 1)

というスタイルで統一しています。引数のパターンマッチなのでインデント下げたくない、みたいな理由だった気がします。

FSharpxでは、

let rec fac = function
    | 0 -> 1
    | n -> n * fac (n - 1)

もしくは

let rec fac =
    function
    | 0 -> 1
    | n -> n * fac (n - 1)

にしています。ファイルの中身にあわせて書き分けていたような、そうでもないような。

判別共用体,列挙体

判別共用体の書き方は、私は次のように書いています。

type Verbosity =
  | Quiet
  | Normal
  | Verbose

パターンなのだから全部に縦棒をいれたいというのは、個人的趣味です。極まれに

type Ordering = | LT | EQ | GT

と書くこともありますが、短い場合限定ですね。

まとめ

なんというか、差分が@gab_kmさんと同じところになったのは偶然か必然か・・・ともかく、読みやすいかどうかは人それぞれなので、開発メンバーで相談したり公開/非公開にあわせて柔軟に切り替えるのがいいのかもしれませんね。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment