Introducción a F# en Visual Studio CodeGet Started with F# in Visual Studio Code

Puede escribir F# en Visual Studio Code con el complemento Ionide para obtener una excelente experiencia de entorno de desarrollo integrado (IDE) multiplataforma y flexible con IntelliSense y refactorizaciones de código básicas.You can write F# in Visual Studio Code with the Ionide plugin to get a great cross-platform, lightweight Integrated Development Environment (IDE) experience with IntelliSense and basic code refactorings. Visite Ionide.IO para obtener más información sobre el complemento.Visit Ionide.io to learn more about the plugin.

Para empezar, asegúrese de que tiene F# y el complemento Ionide instalado correctamente.To begin, ensure that you have F# and the Ionide plugin correctly installed.

Nota

Ionide generará proyectos F# de .NET Framework, no dotnet Core, que pueden tener problemas de compatibilidad entre plataformas.Ionide will generate .NET Framework F# projects, not dotnet core, which can have cross-platform compatibility issues. Si está ejecutando en Linux o OSX, una forma más sencilla de empezar es usar las herramientas de línea de comandos.If you are running on Linux or OSX, a simpler way to get started is to use the command-line tools.

Crear su primer proyecto con IonideCreating your first project with Ionide

Para crear un nuevo F# proyecto, abra Visual Studio Code en una nueva carpeta (puede asignarle el nombre que desee).To create a new F# project, open Visual Studio Code in a new folder (you can name it whatever you like).

A continuación, abra la paleta de comandos (ver > paleta de comandos) y escriba lo siguiente:Next, open the command palette (View > Command Palette) and type the following:

> F# new project

Esto está basado en el proyecto de falsificación.This is powered by the FORGE project.

Nota

Si no ve las opciones de plantilla, intente actualizar las plantillas ejecutando el siguiente comando en la paleta de >F#: Refresh Project Templatescomandos:.If you don't see template options, try refreshing templates by running the following command in the Command Palette: >F#: Refresh Project Templates.

Seleccione "F#: Nuevo proyecto "presionando entrar.Select "F#: New Project" by hitting Enter. Esto le llevará al paso siguiente, que es para seleccionar una plantilla de proyecto.This takes you to the next step, which is for selecting a project template.

Seleccione la classlib plantilla y presione entrar.Pick the classlib template and hit Enter.

A continuación, elija un directorio en el que crear el proyecto.Next, pick a directory to create the project in. Si lo deja en blanco, se usa el directorio actual.If you leave it blank, it uses the current directory.

Por último, asigne un nombre al proyecto en el paso final.Finally, name your project in the final step. F#usa mayúsculas y minúsculas Pascal para los nombres de proyecto.F# uses Pascal case for project names. En este artículo ClassLibraryDemo se usa como nombre.This article uses ClassLibraryDemo as the name. Una vez que haya escrito el nombre que desea para el proyecto, presione entrar.Once you've entered the name you want for your project, hit Enter.

Si siguió el paso anterior, debería obtener el Visual Studio Code área de trabajo en el lado izquierdo para que aparezca con lo siguiente:If you followed the previous step, you should get the Visual Studio Code Workspace on the left-hand side to appear with the following:

  1. El F# proyecto en sí, debajo ClassLibraryDemo de la carpeta.The F# project itself, underneath the ClassLibraryDemo folder.
  2. La estructura de directorios correcta para agregar paquetes Paketa través de.The correct directory structure for adding packages via Paket.
  3. Un script de compilación multiplataforma con FAKE.A cross-platform build script with FAKE.
  4. Ejecutable paket.exe que puede capturar paquetes y resolver las dependencias automáticamente.The paket.exe executable that can fetch packages and resolve dependencies for you.
  5. Un .gitignore archivo si desea agregar este proyecto al control de código fuente basado en Git.A .gitignore file if you wish to add this project to Git-based source control.

Escribir códigoWriting some code

Abra la carpeta ClassLibraryDemo .Open the ClassLibraryDemo folder. Debería ver los archivos siguientes:You should see the following files:

  1. ClassLibraryDemo.fs, un F# archivo de implementación con una clase definida.ClassLibraryDemo.fs, an F# implementation file with a class defined.
  2. ClassLibraryDemo.fsproj, un F# archivo de proyecto que se usa para compilar este proyecto.ClassLibraryDemo.fsproj, an F# project file used to build this project.
  3. Script.fsx, un F# archivo de script que carga el archivo de código fuente.Script.fsx, an F# script file that loads the source file.
  4. paket.references, un archivo Paket que especifica las dependencias del proyecto.paket.references, a Paket file that specifies the project dependencies.

Abra Script.fsxy agregue el código siguiente al final de la misma:Open Script.fsx, and add the following code at the end of it:

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.This function converts a word to a form of Pig Latin. El siguiente paso es evaluarlo mediante F# Interactive (FSI).The next step is to evaluate it using F# Interactive (FSI).

Resalte toda la función (debe tener 11 líneas de longitud).Highlight the entire function (it should be 11 lines long). Una vez resaltado, mantenga presionada la tecla Alt y presione entrar.Once it is highlighted, hold the Alt key and hit Enter. Observará que aparece una ventana emergente y debería mostrar algo parecido a esto:You'll notice a window pop up below, and it should show something like this:

Ejemplo de F# salida interactiva con Ionide

Esto hizo tres cosas:This did three things:

  1. Se inició el proceso FSI.It started the FSI process.
  2. Envió el código que resaltó en el proceso FSI.It sent the code you highlighted over the FSI process.
  3. El proceso FSI evaluó el código que ha enviado.The FSI process evaluated the code you sent over.

Dado que lo que envió es una función, ahora puede llamar a esa función con FSI.Because what you sent over was a function, you can now call that function with FSI! En la ventana interactiva, escriba lo siguiente:In the interactive window, type the following:

toPigLatin "banana";;

Debería ver el siguiente resultado:You should see the following result:

val it : string = "ananabay"

Ahora, vamos a probar una vocal como la primera letra.Now, let's try with a vowel as the first letter. Escriba lo siguiente:Enter the following:

toPigLatin "apple";;

Debería ver el siguiente resultado:You should see the following result:

val it : string = "appleyay"

Parece que la función funciona según lo esperado.The function appears to be working as expected. Enhorabuena, acaba de escribir su primera F# función en Visual Studio Code y la evaluó con FSI.Congratulations, you just wrote your first F# function in Visual Studio Code and evaluated it with FSI!

Nota

Como puede haber observado, las líneas de FSI se terminan con ;;.As you may have noticed, the lines in FSI are terminated with ;;. Esto se debe a que FSI le permite escribir varias líneas.This is because FSI allows you to enter multiple lines. Al ;; final permite que FSI sepa cuándo finaliza el código.The ;; at the end lets FSI know when the code is finished.

Explicación del códigoExplaining the code

Si no está seguro de lo que realmente está haciendo el código, aquí se muestra paso a paso.If you're not sure about what the code is actually doing, here's a step-by-step.

Como puede ver, toPigLatin es una función que toma una palabra como su entrada y la convierte en una representación de Pig-latín de esa palabra.As you can see, toPigLatin is a function that takes a word as its input and converts it to a Pig-Latin representation of that word. Las reglas para esto son las siguientes:The rules for this are as follows:

Si el primer carácter de una palabra comienza con una vocal, agregue "Yay" al final de la palabra.If the first character in a word starts with a vowel, add "yay" to the end of the word. Si no se inicia con una vocal, mueva el primer carácter al final de la palabra y agréguele "Ay".If it doesn't start with a vowel, move that first character to the end of the word and add "ay" to it.

Es posible que haya observado lo siguiente en FSI:You may have noticed the following in FSI:

val toPigLatin : word:string -> string

Esto indica que toPigLatin es una función que toma string como entrada (llamada word) y devuelve otra string.This states that toPigLatin is a function that takes in a string as input (called word), and returns another string. Esto se conoce como la firma de tipo de la función, una parte fundamental F# de la clave para entender F# el código.This is known as the type signature of the function, a fundamental piece of F# that's key to understanding F# code. También observará esto si mantiene el puntero sobre la función en Visual Studio Code.You'll also notice this if you hover over the function in Visual Studio Code.

En el cuerpo de la función, observará dos partes distintas:In the body of the function, you'll notice two distinct parts:

  1. 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 la coincidencia de patrones:An inner function, called isVowel, that determines if a given character (c) is a vowel by checking if it matches one of the provided patterns via Pattern Matching:

    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' |'o' |'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
  2. if..then..else Expresión que comprueba si el primer carácter es una vocal y crea un valor devuelto fuera de los caracteres de entrada en función de si el primer carácter era una vocal o no:An if..then..else expression that checks if the first character is a vowel, and constructs a return value out of the input characters based on if the first character was a vowel or not:

    if isVowel word.[0] then
        word + "yay"
    else
        word.[1..] + string(word.[0]) + "ay"
    

El flujo de toPigLatin es así:The flow of toPigLatin is thus:

Comprueba si el primer carácter de la palabra de entrada es una vocal.Check if the first character of the input word is a vowel. Si es así, adjunte "Yay" al final de la palabra.If it is, attach "yay" to the end of the word. En caso contrario, mueva el primer carácter al final de la palabra y agréguele "Ay".Otherwise, move that first character to the end of the word and add "ay" to it.

Hay un aspecto final que se debe tener en cuenta: no hay ninguna instrucción explícita para devolver de la función, a diferencia de muchos otros lenguajes.There's one final thing to notice about this: there's no explicit instruction to return from the function, unlike many other languages out there. Esto se debe F# a que se basa en expresiones y la última expresión del cuerpo de una función es el valor devuelto.This is because F# is Expression-based, and the last expression in the body of a function is the return value. Dado if..then..else que es una expresión, el cuerpo then del bloque else o el cuerpo del bloque se devolverá en función del valor de entrada.Because if..then..else is itself an expression, the body of the then block or the body of the else block will be returned depending on the input value.

Mover el código de script al archivo de implementaciónMoving your script code into the implementation file

En las secciones anteriores de este artículo se ha mostrado un primer paso F# común en la escritura del código: escribir una función inicial y ejecutarla de forma interactiva con FSI.The previous sections in this article demonstrated a common first step in writing F# code: writing an initial function and executing it interactively with FSI. Esto se conoce como desarrollo controlado por REPL, donde REPL representa el bucle de lectura-evaluación-impresión.This is known as REPL-driven development, where REPL stands for "Read-Evaluate-Print Loop". Es una excelente manera de experimentar con la funcionalidad hasta que tenga algo que funcione.It's a great way to experiment with functionality until you have something working.

El siguiente paso del desarrollo controlado por REPL es trasladar el código de trabajo F# a un archivo de implementación.The next step in REPL-driven development is to move working code into an F# implementation file. Después, el F# compilador puede compilar en un ensamblado que se pueda ejecutar.It can then be compiled by the F# compiler into an assembly that can be executed.

Para empezar, Abra ClassLibraryDemo.fs.To begin, open ClassLibraryDemo.fs. Observará que parte del código ya está en él.You'll notice that some code is already in there. Continúe y elimine la definición de clase, pero asegúrese de dejar la namespace declaración en la parte superior.Go ahead and delete the class definition, but make sure to leave the namespace declaration at the top.

A continuación, cree un module nuevo PigLatin denominado y copie toPigLatin la función en él de la manera siguiente:Next, create a new module called PigLatin and copy the toPigLatin function into it as such:

namespace ClassLibraryDemo

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"

A continuación, vuelva Script.fsx a abrir el archivo y elimine toPigLatin toda la función, pero asegúrese de mantener las dos líneas siguientes en el archivo:Next, open the Script.fsx file again, and delete the entire toPigLatin function, but make sure to keep the following two lines in the file:

#load "ClassLibraryDemo.fs"
open ClassLibraryDemo

Seleccione ambas líneas de texto y presione Alt + Entrar para ejecutar estas líneas en FSI.Select both lines of text and press Alt+Enter to execute these lines in FSI. Estos cargarán el contenido de la biblioteca de Pig Latin en el proceso FSI open y ClassLibraryDemo el espacio de nombres para que tenga acceso a la funcionalidad.These will load the contents of the Pig Latin library into the FSI process and open the ClassLibraryDemo namespace so that you have access to the functionality.

A continuación, en la ventana FSI, llame a la función PigLatin con el módulo que definió anteriormente:Next, in the FSI window, call the function with the PigLatin module that you defined earlier:

> PigLatin.toPigLatin "banana";;
val it : string = "ananabay"
> PigLatin.toPigLatin "apple";;
val it : string = "appleyay"

CorrectoSuccess! Obtiene los mismos resultados que antes, pero ahora se carga desde un F# archivo de implementación.You get the same results as before, but now loaded from an F# implementation file. La principal diferencia es que F# los archivos de código fuente se compilan en ensamblados que se pueden ejecutar en cualquier lugar, no solo en FSI.The major difference here is that F# source files are compiled into assemblies that can be executed anywhere, not just in FSI.

ResumenSummary

En este artículo, ha aprendido lo siguiente:In this article, you've learned:

  1. Cómo configurar Visual Studio Code con Ionide.How to set up Visual Studio Code with Ionide.
  2. Cómo crear su primer F# proyecto con Ionide.How to create your first F# project with Ionide.
  3. Cómo usar F# scripting para escribir la primera F# función en Ionide y, a continuación, ejecutarla en FSI.How to use F# Scripting to write your first F# function in Ionide and then execute it in FSI.
  4. Cómo migrar el código de script al F# origen y, después, llamar a ese código desde FSI.How to migrate your script code to F# source and then call that code from FSI.

Ahora está preparado para escribir mucho más F# código con Visual Studio Code y Ionide.You're now equipped to write much more F# code using Visual Studio Code and Ionide.

solución de problemasTroubleshooting

Estas son algunas de las formas en que puede solucionar ciertos problemas que pueden surgir:Here are a few ways you can troubleshoot certain problems that you might run into:

  1. Para obtener las características de edición de código de Ionide F# , los archivos deben guardarse en el disco y dentro de una carpeta que esté abierta en el área de trabajo Visual Studio Code.To get the code editing features of Ionide, your F# files need to be saved to disk and inside of a folder that is open in the Visual Studio Code workspace.
  2. Si ha realizado cambios en el sistema o ha instalado los requisitos previos de Ionide con Visual Studio Code abrir, reinicie Visual Studio Code.If you've made changes to your system or installed Ionide prerequisites with Visual Studio Code open, restart Visual Studio Code.
  3. Compruebe que puede usar el F# compilador F# e interactivo desde la línea de comandos sin una ruta de acceso completa.Check that you can use the F# compiler and F# interactive from the command line without a fully-qualified path. Puede fsc hacerlo escribiendo en una línea de comandos para el fsi F# compilador y, o fsharpi bien para las F# herramientas visuales en Windows y mono en Mac/Linux, respectivamente.You can do so by typing fsc in a command line for the F# compiler, and fsi or fsharpi for the Visual F# tools on Windows and Mono on Mac/Linux, respectively.
  4. Si tiene caracteres no válidos en los directorios del proyecto, es posible que Ionide no funcione.If you have invalid characters in your project directories, Ionide might not work. Cambie el nombre de los directorios del proyecto si éste es el caso.Rename your project directories if this is the case.
  5. Si no funciona ninguno de los comandos de Ionide, compruebe los enlaces de la Visual Studio Code para ver si se están reemplazando por accidente.If none of the Ionide commands are working, check your Visual Studio Code keybindings to see if you're overriding them by accident.
  6. Si Ionide se ha interrumpido en el equipo y ninguno de los anteriores ha solucionado el problema, ionide-fsharp intente quitar el directorio en la máquina y vuelva a instalar el conjunto de complementos.If Ionide is broken on your machine and none of the above has fixed your problem, try removing the ionide-fsharp directory on your machine and reinstall the plugin suite.

Ionide es un proyecto de código abierto creado y mantenido por miembros de F# la comunidad.Ionide is an open source project built and maintained by members of the F# community. Informe de los problemas y no dude en contribuir en el Ionide-VSCode: Repositoriode github de FSharp.Please report issues and feel free to contribute at the Ionide-VSCode: FSharp GitHub repository.

Si tiene un problema para notificar, siga las instrucciones para obtener los registros que se van a usar al informar de un problema.If you have an issue to report, please follow the instructions for getting logs to use when reporting an issue.

También puede solicitar más ayuda de la comunidad y F# los desarrolladores de Ionide en el canal de Gitter de Ionide.You can also ask for further help from the Ionide developers and F# community in the Ionide Gitter channel.

Pasos siguientesNext steps

Para obtener más información F# acerca de y las características del lenguaje, consulte el paseo F# por.To learn more about F# and the features of the language, check out Tour of F#.