Introducción a F# en Visual Studio Code
Puede escribir F# en Visual Studio Code con el complemento Ionide de para disfrutar de una excelente experiencia multiplataforma y ligera en el entorno de desarrollo integrado (IDE), con IntelliSense y refactorizaciones de código. Visite Ionide.io para obtener más información sobre el complemento.
Nota
Antes de empezar, asegúrese de que ha instalado tanto F# como el complemento Ionide.
Creación del primer proyecto con Ionide
Para crear un proyecto de F#, abra una línea de comandos y cree un proyecto con la CLI de .NET:
dotnet new console -lang "F#" -o FirstIonideProject
Una vez completado, cambie el directorio al proyecto y abra Visual Studio Code:
cd FirstIonideProject
code .
Una vez que el proyecto se cargue en Visual Studio Code, debería ver el panel Explorador de soluciones de F# en el lado izquierdo de la ventana abierta. Esto significa que Ionide ha cargado correctamente el proyecto que acaba de crear. Puede escribir código en el editor antes de este momento dado, pero una vez que esto sucede, todo ha terminado de cargarse.
Escritura del primer script
Una vez que haya configurado Visual Studio Code para usar scripts de .NET Core, vaya a la vista Explorador de Visual Studio Code y cree un archivo. Asígnele el nombre MyFirstScript.fsx.
Ahora agregue el código siguiente:
let toPigLatin (word: string) =
let isVowel (c: char) =
match c with
| 'a' | 'e' | 'i' | 'o' | 'u'
| 'A' | 'E' | 'I' | 'O' | 'U' -> true
|_ -> false
if isVowel word[0] then
word + "yay"
else
word[1..] + string(word[0]) + "ay"
Esta función convierte una palabra en una forma de Pig Latin, un argot lúdico del inglés. El siguiente paso es evaluarlo mediante F# Interactive (FSI).
Resalte toda la función (debe ser de 11 líneas de longitud). Una vez resaltada, mantenga presionada la tecla Alt y presione Intro. Observará que aparece una ventana de terminal en la parte inferior de la pantalla y debería tener un aspecto similar al siguiente:
Esto hizo tres cosas:
- Se ha iniciado el proceso de FSI.
- Se ha enviado el código resaltado al proceso de FSI.
- El proceso FSI evaluó el código que enviaste.
Como lo que ha enviado es una función, ahora puede llamar a esa función con FSI. En la ventana interactiva, escriba lo siguiente:
toPigLatin "banana";;
Debería ver el siguiente resultado:
val it: string = "ananabay"
Ahora, vamos a probar con una vocal como la primera letra. Escriba lo siguiente:
toPigLatin "apple";;
Debería ver el siguiente resultado:
val it: string = "appleyay"
Parece que la función funciona según lo previsto. Enhorabuena, acaba de escribir su primera función de F# en Visual Studio Code y evaluarla con FSI.
Nota
Como puede haber observado, las líneas de FSI finalizan con ;;
. Esto se debe a que FSI permite escribir varias líneas. El ;;
al final permite a FSI saber cuándo finaliza el código.
Explicación del código
Si no está seguro de lo que hace realmente el código, este es un paso a paso.
Como puede ver, toPigLatin
es una función que toma una palabra como entrada y la convierte en una representación Pig-Latin de esa palabra. Las reglas para esto son las siguientes:
Si el primer carácter de una palabra comienza con un vocal, agregue "yay" al final de la palabra. Si no comienza con una vocal, mueva ese primer carácter al final de la palabra y agregue "ay".
Es posible que haya observado lo siguiente en FSI:
val toPigLatin: word: string -> string
Esto indica que toPigLatin
es una función que toma un string
como entrada (denominada word
) y devuelve otra string
. Esto se conoce como la firma de tipo de la función, una parte fundamental de F# que es clave para comprender el código de F#. También observará esto si mantiene el puntero sobre la función en Visual Studio Code.
En el cuerpo de la función, observará dos partes distintas:
Una función interna, denominada
isVowel
, que determina si un carácter determinado (c
) es una vocal comprobando si coincide con uno de los patrones proporcionados a través de Coincidencia de patrones:let isVowel (c: char) = match c with | 'a' | 'e' | 'i' | 'o' | 'u' | 'A' | 'E' | 'I' | 'O' | 'U' -> true |_ -> false
Expresión
if..then..else
que comprueba si el primer carácter es un vocal y construye un valor devuelto fuera de los caracteres de entrada en función de si el primer carácter era un vocal o no:if isVowel word[0] then word + "yay" else word[1..] + string(word[0]) + "ay"
Por lo tanto, el flujo de toPigLatin
es el siguiente:
Compruebe si el primer carácter de la palabra de entrada es un vocal. Si es así, adjunte "yay" al final de la palabra. De lo contrario, mueva ese primer carácter al final de la palabra y agregue "ay" a él.
Hay una cosa final que se debe tener en cuenta sobre esto: en F#, no hay ninguna instrucción explícita para retornar desde la función. Esto se debe a que F# está basado en expresiones y la última expresión evaluada en el cuerpo de una función determina el valor devuelto de esa función. Dado que if..then..else
es una expresión, la evaluación del cuerpo del bloque then
o el cuerpo del bloque else
determina el valor devuelto por la función toPigLatin
.
Convertir la aplicación de consola en un generador de Pig Latin
En las secciones anteriores de este artículo se mostró un primer paso común para escribir código de F#: escribir una función inicial y ejecutarla de forma interactiva con FSI. Esto se conoce como desarrollo controlado por REPL, donde REPL significa "Read-Evaluate-Print Loop". Es una excelente manera de experimentar con la funcionalidad hasta que tenga algo que funcione.
El siguiente paso en el desarrollo controlado por REPL es mover el código de trabajo a un archivo de implementación de F#. Después, el compilador de F# puede compilarlo en un ensamblado que se puede ejecutar.
Para empezar, abra el archivo Program.fs que creó anteriormente con la CLI de .NET. Observará que algún código ya está ahí.
A continuación, cree un nuevo module
denominado PigLatin
y copie la función de toPigLatin
que creó anteriormente en ella como tal:
module PigLatin =
let toPigLatin (word: string) =
let isVowel (c: char) =
match c with
| 'a' | 'e' | 'i' | 'o' | 'u'
| 'A' | 'E' | 'I' | 'O' | 'U' -> true
|_ -> false
if isVowel word[0] then
word + "yay"
else
word[1..] + string word[0] + "ay"
Este módulo debe estar por encima de la función main
y debajo de la declaración open System
. El orden de las declaraciones es importante en F#, por lo que deberá definir la función antes de llamarla en un archivo.
Luego, en la función main
, llame a la función de generador de Pig Latin en los argumentos:
[<EntryPoint>]
let main args =
for arg in args do
let newArg = PigLatin.toPigLatin arg
printfn "%s in Pig Latin is: %s" arg newArg
0
Ahora puede ejecutar la aplicación de consola desde la línea de comandos:
dotnet run apple banana
Y verá que genera el mismo resultado que el archivo de script, pero esta vez como un programa en ejecución.
Solución de problemas de Ionide
Estas son algunas maneras de solucionar ciertos problemas que puede encontrar:
- Para obtener las características de edición de código de Ionide, los archivos F# deben guardarse en el disco y dentro de una carpeta que esté abierta en el área de trabajo de Visual Studio Code.
- Si ha realizado cambios en el sistema o ha instalado requisitos previos de Ionide con Visual Studio Code abierto, reinicie Visual Studio Code.
- Si tiene caracteres no válidos en los directorios del proyecto, puede que Ionide no funcione. Cambie el nombre de los directorios del proyecto si este es el caso.
- Si ninguno de los comandos de Ionide funciona, compruebe los Enlaces de teclado de Visual Studio Code para ver si los está invalidando sin querer.
- Si Ionide está roto en la máquina y ninguno de los anteriores ha corregido el problema, intente quitar el directorio
ionide-fsharp
en el equipo y vuelva a instalar el conjunto de complementos. - Si no se pudo cargar un proyecto (el Explorador de soluciones de F# mostrará esto), haga clic con el botón derecho en ese proyecto y haga clic en Ver detalles para obtener más información de diagnóstico.
Ionide es un proyecto de código abierto creado y mantenido por los miembros de la comunidad de F#. Informe de problemas y no dude en contribuir en el repositorio de GitHub de ionide-vscode-fsharp.
También puedes pedir más ayuda a los desarrolladores de Ionide y a la comunidad de F# en el canal de Gitter de Ionide .
Pasos siguientes
Para obtener más información sobre F# y las características del lenguaje, consulte Tour of F#.