2009-01-20 12 views
30

Estoy en el proceso de aprender F # y estoy disfrutando hasta ahora. Casi todos los ejemplos en línea usan la sintaxis ligera (#light); sin embargo, también da un comentario sobre el hecho de que está activado para dicho ejemplo en la mayoría de los casos.F # - ¿Debo aprender con o sin # luz?

¿Es mejor aprender F # usando #light habilitado o deshabilitado? Estoy planeando eventualmente aprenderlo sin encenderlo, pero tengo curiosidad sobre si sería mejor aprenderlo al principio o trabajar en aplicarlo después de que conozco más el lenguaje central.

Respuesta

34

Definitivamente preferiría aprender F # con la sintaxis #light. La versión no liviana a veces es útil para comprender algunos trucos sobre la sintaxis de F #, pero la sintaxis de #light te da mucha experiencia agradable.

Por ejemplo - con ayuda de #Light

let add a b c = 
    let ab = a + b 
    printfn "%d" ab 
    c - ab 

si no se utilizan la luz se puede escribir la misma cosa como esta:

let add a b c = 
    let ab = a + b in // 'in' keyword specifies where the binding (value 'ab') is valid 
    printfn "%d" ab; // ';' is operator for sequencing expressions 
    c - ab;;   // ';;' is end of a function declaration 

Esto, por ejemplo, muestra que no se puede escribir algo como:

let doNothing a b = 
    let sum = a + b in 

Hay una palabra clave 'in' al final, pero la función no tiene ningún cuerpo (porque se no hay expresión después de 'in'). En este caso, la sintaxis no liviana a veces es interesante para entender lo que está sucediendo ... Pero como puede ver, el código #light es mucho más simple.

+1

Sangría, o paréntesis, o ... hay muchas formas de comunicar el alcance que no sea 'in' o ';' u otro token de delimitador. Después de superar la reacción de retroceso inicial, la mayoría de las personas descubren que el espacio en blanco significativo es excelente. – Brian

+1

@Brian: a menos que sea ciego, en cuyo caso la programación en un idioma donde el espacio en blanco es importante es bastante tedioso: http://stackoverflow.com/questions/118643/ –

+0

Gracias por el ejemplo. Estoy de acuerdo en que el espacio en blanco puede ser tedioso, no he encontrado que el espacio en blanco de #light sea desalentador a diferencia de otros lenguajes. A partir de esta respuesta, he decidido centrarme en #light para aprender el idioma y luego aplicar la sintaxis más detallada una vez que esté más familiarizado con F #. – JamesEggers

10

El "#light" probablemente se convertirá en el predeterminado en una versión futura del idioma, por lo que lo aprendería de esa manera. Creo que es raro que alguien use la sintaxis más pesada a excepción de la compatibilidad OCaml (ya sea cuando se compila de forma cruzada, o porque el ser humano sentado en el teclado conoce OCaml y está haciendo una transición más suave a F #).

5

Como aprendí F # de un libro OCaml (y uso un modo OCaml para que Emacs edite el código F #), prefiero usar la sintaxis "pesada". He trabajado con el código #light y, por supuesto, la mayoría de los ejemplos F # están escritos usando la sintaxis ligera, por lo que es útil tener cierta familiaridad general. Dicho esto, es bastante más fácil cambiar de pesado a ligero que al revés, por lo que no es una mala idea aprenderlo con la sintaxis pesada.

Me he encontrado con el error molesto ocasional con la sintaxis pesada siendo tratada como un ciudadano de segunda clase (combinación se rompió para expresiones de cálculo un par de versiones), pero estos son bastante raros. En términos generales, no creo que las diferencias sean muy significativas y necesito mirar de cerca para determinar qué sintaxis se está usando cuando se mira el código de forma aislada. YMMV.

1

Si mal no recuerdo, el libro "Expert C#" menciona que #light será el predeterminado cuando F # se envíe y que la sintaxis no liviana solo sea compatible.

Cuestiones relacionadas