1

以下の 2 つの例を考えてみましょう。

let myList = [0..10]
List.map (fun x -> x + 5)
    (List.filter (fun x -> x % 3 = 0) myList)

let myList = [0..10]
List.map (fun x -> x + 5) (List.filter (fun x -> x % 3 = 0) myList)

どちらの例でも同じ結果が得られます。

val myList : int list = [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
val it : int list = [5; 8; 11; 14]

F# は空白に敏感な言語ですが、これら 2 つの例に技術的な違いはありますか?

4

1 に答える 1

9

F# Code Formatting Guidelinesは非常に役立つと思います。特に、インデントの一般的なルールに関する最初のセクションは役に立ちます

以下は、関連するページからの抜粋です。

長い行を分割するときは、行の続きを囲んでいる構造よりもさらにインデントする必要があります。たとえば、関数の引数は、次のコードに示すように、関数名の最初の文字よりも遠くにインデントする必要があります。

let someFunction param1 param2 =
    let result = myFunction1 param1
                     param2
    result * 100

したがって、最初の例のインデントは、F# コンパイラが例を正しく解析するのに役立ちます。

F# は空白に敏感な言語ですが、これら 2 つの例に技術的な違いはありますか?

いいえ。ここでは、2 つのコード フラグメントが同じ意味を持ちます。唯一の違いは読みやすさです。関数全体を読むために目が右端に行く必要がないので、私は最初のものを好みます。

行が長すぎる場合、パイプを使用して引数の順序を変更し、その行を複数の行に分割できます。

myList
|> List.filter (fun x -> x % 3 = 0)
|> List.map (fun x -> x + 5)

アップデート:

時間をかけてさまざまな情報源から情報を集め、F# の書式設定規則に関する包括的なガイドを作成しました。あなたはそれを調べたいかもしれません。

于 2013-02-10T21:26:56.007 に答える