Estilo F #: prefiera () o < |
-
02-07-2019 - |
Pregunta
¿Cuál de estas dos alternativas te encuentras con más frecuencia y cuál es más "idiomática"?
- f arg (obj.DoStuff ())
- f arg < | obj.DoStuff ()
Solución
En general, no sé si uno u otro es más idiomático.
Personalmente, la única vez que uso < | está con " aumentar " ;:
raise <| new FooException("blah")
Aparte de eso, siempre uso parens. Tenga en cuenta que, dado que la mayoría de los códigos F # utilizan funciones al curry, esto no suele implicar ningún " extra " parens:
f arg (g x y)
Es cuando entras en constructores y funciones que no tienen curry y todo eso comienza a ser menos bonito:
f arg (g(x,y))
Probablemente al menos consideremos cambiar las reglas de los lenguajes F # para que las aplicaciones de alta prioridad se unan aún más estrechamente; ahora mismo
f g()
parses como
f g ()
pero a mucha gente le gustaría que se analice como
f (g())
(el caso motivador en la pregunta original). Si tiene una opinión firme sobre esto, deje un comentario sobre esta respuesta.
Otros consejos
Debido a que la inferencia de tipos funciona de izquierda a derecha, una ventaja de usar | >
es que permite a F # inferir el tipo del argumento de la función.
Como ejemplo artificial,
[1; 2; 3] |> (fun x -> x.Length*2)
funciona bien, pero
(fun x -> x.Length*2) [1; 2; 3]
se queja de " búsqueda en objeto de tipo indeterminado " ;.
Uso () mucho más a menudo, pero eso es solo una preferencia, estoy bastante seguro de que < | Es más idomático, pero uso () por hábito.
Siempre que sea posible, prefiero | > porque se lee de izquierda a derecha.