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

Puede escribir F# en Visual Studio Code con el Ionide complemento para obtener una gran experiencia de entorno de desarrollo integrado (IDE) ligero en varias plataformas, con IntelliSense y el código básico refactorizaciones.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 ha instalado correctamente el complemento de Ionide.To begin, ensure that you have F# and the Ionide plugin correctly installed.

Nota

Ionide generará .NET Framework F# proyectos, no de dotnet core, lo que puede tener problemas de compatibilidad multiplataforma.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 a trabajar es usar el 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# del proyecto, abra Visual Studio Code en una nueva carpeta (puede denominarlo que prefiera).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 (Vista > Paleta de comandos) y escriba lo siguiente:Next, open the command palette (View > Command Palette) and type the following:

> F# new project

Esto funciona con el FALSIFICAR proyecto.This is powered by the FORGE project.

Nota

Si no ve las opciones de plantilla, pruebe a actualizar las plantillas ejecutando el siguiente comando en la paleta de comandos: >F#: Refresh Project Templates.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"pulsando ENTRAR.Select "F#: New Project" by hitting Enter. Esto le lleva 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.

Elegir el classlib plantilla del sistema y presione ENTRAR.Pick the classlib template and hit Enter.

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

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

Si ha seguido el paso anterior, debería obtener Visual Studio código de área de trabajo en el lado izquierdo que aparezca con el 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# propio proyecto, debajo de la directiva el ClassLibraryDemo carpeta.The F# project itself, underneath the ClassLibraryDemo folder.
  2. Para agregar paquetes a través de la estructura de directorio correcto Paket .The correct directory structure for adding packages via Paket.
  3. Una multiplataforma crear secuencia de comandos con FAKE .A cross-platform build script with FAKE.
  4. El paket.exe ejecutable que puede capturar paquetes y resolver las dependencias para usted.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 basados en Git.A .gitignore file if you wish to add this project to Git-based source control.

Escribir códigoWriting some code

Abra el ClassLibraryDemo carpeta.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 utilizado para compilar el proyecto.ClassLibraryDemo.fsproj, an F# project file used to build this project.
  3. Script.fsx, un F# archivo de script que se carga el archivo de origen.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 un formulario de Pig Latin.This function converts a word to a form of Pig Latin. El siguiente paso es evaluar mediante F# interactivo (FSI).The next step is to evaluate it using F# Interactive (FSI).

Resaltar toda la función (debe ser 11 líneas de largo).Highlight the entire function (it should be 11 lines long). Una vez que se resalta, mantenga el Alt clave y posicionamiento ENTRAR.Once it is highlighted, hold the Alt key and hit Enter. Verá una ventana emergente a continuación, y debe aparecer algo parecido a esto:You'll notice a window pop up below, and it should show something like this:

Ejemplo de F# interactivo de salida con Ionide

Esto hizo tres cosas:This did three things:

  1. Inició el proceso FSI.It started the FSI process.
  2. El código resaltado que envíe a través del proceso FSI.It sent the code you highlighted over the FSI process.
  3. El proceso FSI evalúa el código que envían a través.The FSI process evaluated the code you sent over.

Debido a que era lo que se envía a través de un 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 resultado siguiente:You should see the following result:

val it : string = "ananabay"

Ahora, vamos a probar con 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 resultado siguiente:You should see the following result:

val it : string = "appleyay"

La función parece que funciona según lo previsto.The function appears to be working as expected. Enhorabuena, acaba de escribir su primer F# funcionan en Visual Studio Code y se evalúa con FSI!Congratulations, you just wrote your first F# function in Visual Studio Code and evaluated it with FSI!

Nota

Como habrá advertido, las líneas en FSI terminan con ;;.As you may have noticed, the lines in FSI are terminated with ;;. Esto es porque FSI le permite escribir varias líneas.This is because FSI allows you to enter multiple lines. El ;; al final sabrá FSI cuando finalice el código.The ;; at the end lets FSI know when the code is finished.

Que explica el códigoExplaining the code

Si no está seguro acerca de lo que realmente está haciendo el código, este es un 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 entrada y lo convierte en una representación de Pig Latin 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 los siguientes:The rules for this are as follows:

Si el primer carácter de una palabra comienza con una vocal, agregue "¡viva" 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, mover ese primer carácter al final de la palabra y "ay" Agregar a ella.If it doesn't start with a vowel, move that first character to the end of the word and add "ay" to it.

Es podrán 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 un string como entrada (denominado 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 el signatura de tipo de la función, una parte fundamental de F# que es clave para comprender F# 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 podrá observar si mantiene el mouse 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, verá dos partes distintas:In the body of the function, you'll notice two distinct parts:

  1. Una función interna, llamada 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: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. Un if..then..else expresión que comprueba si el primer carácter sea una vocal y construcciones un retorno de valor fuera de los caracteres de entrada en función de si el primer carácter o no era una vocal: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 por tanto, es:The flow of toPigLatin is thus:

Compruebe si el primer carácter de la palabra de entrada sea una vocal.Check if the first character of the input word is a vowel. Si es así, adjuntar "¡viva" al final de la palabra.If it is, attach "yay" to the end of the word. En caso contrario, mueva ese primer carácter al final de la palabra y "ay" Agregar a ella.Otherwise, move that first character to the end of the word and add "ay" to it.

Hay una última cosa a tener en cuenta sobre esto: no hay ninguna instrucción explícita para devolver de la función, a diferencia de muchos otros lenguajes ahí.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 es porque F# está basado en la expresión, y la última expresión en el 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 que if..then..else es en sí mismo una expresión, el cuerpo de la then bloque o en el cuerpo de la else bloque se devolverán según el 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.

Migración de código de script en el archivo de implementaciónMoving your script code into the implementation file

Las secciones anteriores de este artículo muestran un primer paso común escrito F# código: escribir una función inicial y se ejecuta interactivamente 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 el desarrollo controlado por REPL, donde REPL es el acrónimo "Read-Evaluate-Print Loop".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 haya algo funcione.It's a great way to experiment with functionality until you have something working.

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

Para comenzar, abra ClassLibraryDemo.fs.To begin, open ClassLibraryDemo.fs. Observará que algún código ya está en no existe.You'll notice that some code is already in there. Siga adelante y eliminar la definición de clase, pero asegúrese de dejar el 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 nuevo module llamado PigLatin y copie el toPigLatin función como tal en él: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, abra el Script.fsx archivo nuevo y eliminar toda la toPigLatin funcionando, 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 + Intro para ejecutar estas líneas en FSI.Select both lines of text and press Alt+Enter to execute these lines in FSI. Estos cargará el contenido de la biblioteca de Pig Latin en el proceso FSI y open el ClassLibraryDemo espacio de nombres para que tengan 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 con el PigLatin 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! Obtener los mismos resultados como antes, pero ahora se cargan 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# 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: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# secuencias de comandos para escribir su primer F# funcionar en Ionide y, a continuación, ejecútelo de 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 a F# de origen y, a continuación, invocar dicho código desde FSI.How to migrate your script code to F# source and then call that code from FSI.

Ahora está equipado para escribir mucho más F# del código mediante 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 maneras de que solucionar ciertos problemas que pueden surgir:Here are a few ways you can troubleshoot certain problems that you might run into:

  1. Para obtener el código en la edición de las características de Ionide, su F# los archivos deben guardarse en el disco y dentro de una carpeta que está abierta en el área de trabajo de 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 instalar requisitos previos de Ionide con código de Visual Studio abierta, 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 y F# 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 hacerlo escribiendo fsc en una línea de comandos para el F# compilador, y fsi o fsharpi para el objeto Visual F# herramientas 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, Ionide podría no funcionar.If you have invalid characters in your project directories, Ionide might not work. Cambiar el nombre de los directorios de proyecto si este es el caso.Rename your project directories if this is the case.
  5. Si ninguno de los comandos Ionide está trabajando, compruebe su enlaces de teclado de Visual Studio Code para ver si se está 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 divide en el equipo y ninguno de los anteriores ha se ha corregido el problema, pruebe a quitar el ionide-fsharp directorio en el equipo y vuelva a instalar el conjunto de complemento.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 los miembros de la F# Comunidad.Ionide is an open source project built and maintained by members of the F# community. Por favor, notificar problemas y no dude en contribuir en el Ionide VSCode: Repositorio de FSharp GitHub.Please report issues and feel free to contribute at the Ionide-VSCode: FSharp GitHub repository.

Si tiene un problema al informe, siga las instrucciones para obtener los registros que se 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 pedir ayuda adicional de los desarrolladores Ionide y F# Comunidad en el Ionide Gitter canal.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 sobre F# y las características del lenguaje, eche un vistazo paseo F# .To learn more about F# and the features of the language, check out Tour of F#.