Stile F #: preferisci () o < |
-
02-07-2019 - |
Domanda
Quale di queste due alternative ti ritrovi a utilizzare più spesso e quale è più "idiomatica"?
- f arg (obj.DoStuff ())
- f arg < | obj.DoStuff ()
Soluzione
Nel complesso, non so che l'uno o l'altro sia più idiomatico.
Personalmente, l'unica volta che uso < | è con " raise " ;:
raise <| new FooException("blah")
A parte questo, uso sempre le parentesi. Si noti che poiché la maggior parte del codice F # utilizza funzioni al curry, ciò non implica in genere alcun "extra". parentesi:
f arg (g x y)
È quando entri in funzioni e costruttori non curry e non inizia a diventare meno carina:
f arg (g(x,y))
Probabilmente almeno considereremo la modifica delle regole dei linguaggi F # in modo che le applicazioni ad alta precedenza si leghino ancora più strettamente; proprio ora
f g()
analizza come
f g ()
ma molte persone vorrebbero che analizzasse come
f (g())
(il caso motivante nella domanda originale). Se hai una forte opinione al riguardo, lascia un commento su questa risposta.
Altri suggerimenti
Poiché l'inferenza del tipo funziona da sinistra a destra, un vantaggio dell'uso di | >
è che consente a F # di inferire il tipo dell'argomento della funzione.
Come esempio inventato,
[1; 2; 3] |> (fun x -> x.Length*2)
funziona bene, ma
(fun x -> x.Length*2) [1; 2; 3]
lamenta "ricerca su oggetto di tipo indeterminato".
Uso () molto più spesso, ma è solo una preferenza, sono abbastanza sicuro che < | è più idomatico, ma io uso () per abitudine.
Quando possibile, preferisco di gran lunga | > perché legge da sinistra a destra.