Partilhar via


Introdução ao F# no Visual Studio Code

Você pode escrever F# no Visual Studio Code com o plug-in Ionide para obter uma ótima experiência leve e multiplataforma do ambiente de desenvolvimento integrado (IDE) com o IntelliSense e refatorações de código. Visite Ionide.io para saber mais sobre o plugin.

Para começar, certifique-se de ter o F# e o plug-in Ionide instalados corretamente.

Crie o seu primeiro projeto com Ionide

Para criar um novo projeto F#, abra uma linha de comando e crie um novo projeto com a CLI do .NET:

dotnet new console -lang "F#" -o FirstIonideProject

Depois de concluído, altere o diretório para o projeto e abra o Visual Studio Code:

cd FirstIonideProject
code .

Depois que o projeto for carregado no Visual Studio Code, você verá o painel Gerenciador de Soluções F# no lado esquerdo da janela aberta. Isso significa que o Ionide carregou com sucesso o projeto que você acabou de criar. Você pode escrever código no editor antes deste ponto no tempo, mas uma vez que isso acontece, tudo terminou de carregar.

Escreva seu primeiro script

Depois de configurar o Visual Studio Code para usar scripts do .NET Core, navegue até o modo de exibição Explorer no Visual Studio Code e crie um novo arquivo. Nomeie-o MyFirstScript.fsx.

Agora adicione o seguinte código a ele:

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 função converte uma palavra em uma forma de latim porco. O próximo passo é avaliá-lo usando F# Interactive (FSI).

Realce toda a função (deve ter 11 linhas). Quando estiver realçado, mantenha pressionada a tecla Alt e pressione Enter. Você notará uma janela de terminal aparecendo na parte inferior da tela, e ela deve ser semelhante a esta:

Example of F# Interactive output with Ionide

Isso fez três coisas:

  1. Iniciou o processo FSI.
  2. Ele enviou o código destacado para o processo FSI.
  3. O processo FSI avaliou o código enviado.

Porque o que você enviou foi uma função, agora você pode chamar essa função com FSI! Na janela interativa, digite o seguinte:

toPigLatin "banana";;

Você verá o seguinte resultado:

val it: string = "ananabay"

Agora, vamos tentar com uma vogal como primeira letra. Introduza o seguinte:

toPigLatin "apple";;

Você verá o seguinte resultado:

val it: string = "appleyay"

A função parece estar funcionando conforme o esperado. Parabéns, você acabou de escrever sua primeira função F# no Visual Studio Code e a avaliou com FSI!

Nota

Como você deve ter notado, as linhas no FSI são encerradas com ;;. Isso ocorre porque o FSI permite que você insira várias linhas. O ;; no final permite que o FSI saiba quando o código está concluído.

Explicação do código

Se você não tiver certeza sobre o que o código está realmente fazendo, aqui está um passo a passo.

Como você pode ver, toPigLatin é uma função que toma uma palavra como entrada e a converte em uma representação porco-latina dessa palavra. As regras para isso são as seguintes:

Se o primeiro caractere de uma palavra começar com uma vogal, adicione "yay" ao final da palavra. Se não começar com uma vogal, mova o primeiro caractere para o final da palavra e adicione "ay" a ela.

Você pode ter notado o seguinte no FSI:

val toPigLatin: word: string -> string

Isso afirma que toPigLatin é uma função que recebe uma string entrada como (chamada word), e retorna outra string. Isso é conhecido como a assinatura de tipo da função, uma peça fundamental do F# que é a chave para entender o código do F#. Você também notará isso se passar o mouse sobre a função no Visual Studio Code.

No corpo da função, você notará duas partes distintas:

  1. Uma função interna, chamada isVowel, que determina se um determinado caractere (c) é uma vogal, verificando se ele corresponde a um dos padrões fornecidos através da Correspondência de Padrões:

    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' | 'o' | 'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
  2. Uma if..then..else expressão que verifica se o primeiro caractere é uma vogal e constrói um valor de retorno a partir dos caracteres de entrada com base em se o primeiro caractere era uma vogal ou não:

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

O fluxo de toPigLatin é assim:

Verifique se o primeiro caractere da palavra de entrada é uma vogal. Se for, anexe "yay" ao final da palavra. Caso contrário, mova esse primeiro caractere para o final da palavra e adicione "ay" a ele.

Há uma última coisa a notar sobre isso: em F#, não há nenhuma instrução explícita para retornar da função. Isso ocorre porque F# é baseado em expressão, e a última expressão avaliada no corpo de uma função determina o valor de retorno dessa função. Porque if..then..else é em si uma expressão, a avaliação do corpo do then bloco ou do corpo do else bloco determina o valor retornado pela toPigLatin função.

Transforme o aplicativo de console em um gerador Pig Latin

As seções anteriores deste artigo demonstraram um primeiro passo comum na escrita de código F#: escrever uma função inicial e executá-la interativamente com o FSI. Isso é conhecido como desenvolvimento orientado por REPL, onde REPL significa "Read-Evaluate-Print Loop". É uma ótima maneira de experimentar a funcionalidade até ter algo funcionando.

A próxima etapa no desenvolvimento orientado por REPL é mover o código de trabalho para um arquivo de implementação F#. Ele pode então ser compilado pelo compilador F# em um assembly que pode ser executado.

Para começar, abra o arquivo Program.fs que você criou anteriormente com a CLI do .NET. Você notará que algum código já está lá.

Em seguida, crie uma nova module chamada PigLatin e copie a toPigLatin função que você criou anteriormente nela 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 deve estar acima da main função e abaixo da open System declaração. A ordem das declarações é importante em F#, portanto, você precisará definir a função antes de chamá-la em um arquivo.

Agora, na função, chame sua main função geradora Pig Latin nos 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

Agora você pode executar seu aplicativo de console a partir da linha de comando:

dotnet run apple banana

E você verá que ele produz o mesmo resultado que o seu arquivo de script, mas desta vez como um programa em execução!

Solução de problemas de ioneto

Aqui estão algumas maneiras de solucionar certos problemas que você pode encontrar:

  1. Para obter os recursos de edição de código do Ionide, seus arquivos F# precisam ser salvos no disco e dentro de uma pasta que está aberta no espaço de trabalho Visual Studio Code.
  2. Se você fez alterações no seu sistema ou instalou os pré-requisitos do Ionide com o Visual Studio Code aberto, reinicie o Visual Studio Code.
  3. Se você tiver caracteres inválidos em seus diretórios de projeto, Ionide pode não funcionar. Renomeie seus diretórios de projeto se esse for o caso.
  4. Se nenhum dos comandos Ionide estiver funcionando, verifique suas ligações de chave de código do Visual Studio para ver se você está substituindo-as por acidente.
  5. Se o Ionide estiver quebrado na sua máquina e nenhum dos itens acima tiver corrigido o problema, tente remover o ionide-fsharp diretório da sua máquina e reinstale o pacote de plugins.
  6. Se um projeto falhou ao carregar (o Gerenciador de Soluções F# mostrará isso), clique com o botão direito do mouse nesse projeto e clique em Ver detalhes para obter mais informações de diagnóstico.

Ionide é um projeto de código aberto construído e mantido por membros da comunidade F#. Reporte problemas e sinta-se à vontade para contribuir no repositório GitHub ionide-vscode-fsharp.

Você também pode pedir mais ajuda aos desenvolvedores do Ionide e à comunidade F# no canal Ionide Gitter.

Próximos passos

Para saber mais sobre F# e os recursos da linguagem, confira Tour of F#.