Introdução ao F# no Visual Studio Code
Você pode gravar F# no Visual Studio Code com o plug-in do Ionide para obter uma ótima experiência de IDE (Ambiente de Desenvolvimento Integrado) multiplataforma e leve com o IntelliSense e refatorações de código. Acesse Ionide.io para saber mais sobre o plug-in.
Para começar, verifique se F# e o plug-in do Ionide foram instalados corretamente.
Criar seu primeiro projeto com o 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ê deverá ver o painel Gerenciador de Soluções F# no lado esquerdo da janela aberto. Isso significa que a Ionide carregou com êxito o projeto que você acabou de criar. Você pode gravar o código no editor antes desse momento, mas depois que isso acontecer, tudo terminará de carregar.
Escrever seu primeiro script
Depois de configurar o Visual Studio Code para usar scripts do .NET Core, navegue até a exibição do Explorer no Visual Studio Code e crie um arquivo. Nomeie-o como 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"
Essa função converte uma palavra em uma forma de Pig Latin. A próxima etapa é avaliá-la usando F# Interativo (FSI).
Realce a função inteira (deve ter 11 linhas de comprimento). Depois de realçada, segure a tecla Alt e pressione Enter. Você observará que uma janela do terminal aparece na parte inferior da tela e ela deve ser semelhante a esta:
Isso fez três coisas:
- Iniciou o processo FSI.
- Enviou o código realçado para o processo FSI.
- O processo FSI avaliou o código enviado.
Como 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ê deverá ver o resultado a seguir:
val it: string = "ananabay"
Agora, vamos tentar com uma vogal como a primeira letra. Insira o seguinte:
toPigLatin "apple";;
Você deverá ver o resultado a seguir:
val it: string = "appleyay"
A função parece estar funcionando conforme o esperado. Parabéns, você acabou de gravar sua primeira função F# no Visual Studio Code e avaliou-a com FSI!
Observação
Como você deve ter notado, as linhas no FSI são encerradas com ;;
. Isso ocorre porque o FSI permite inserir várias linhas. O ;;
no final permite que o FSI saiba quando o código é concluído.
Explicando o 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 usa uma palavra como sua entrada e a converte em uma representação Pig-Latin dessa palavra. Nesse caso, as regras são as seguintes:
Se o primeiro caractere em uma palavra começar com uma vogal, adicione "yay" ao final da palavra. Se ele não começar com uma vogal, mova o primeiro caractere para o final da palavra e adicione "ay".
Você deve ter observado o seguinte no FSI:
val toPigLatin: word: string -> string
Isso afirma que toPigLatin
é uma função que recebe string
como entrada (chamada word
) e retorna outro string
. Isso é conhecido como a assinatura de tipo da função, uma parte fundamental do F# que é essencial para entender o código F#. Você também observará isso se passar o mouse sobre a função no Visual Studio Code.
No corpo da função, você observará duas partes distintas:
Uma função interna, chamada
isVowel
, que determina se um caractere específico (c
) é uma vogal verificando se corresponde a um dos padrões fornecidos pela Correspondência de Padrões:let isVowel (c: char) = match c with | 'a' | 'e' | 'i' | 'o' | 'u' | 'A' | 'E' | 'I' | 'O' | 'U' -> true |_ -> false
Uma expressão
if..then..else
que verifica se o primeiro caractere é uma vogal e constrói um valor retornado 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
é, portanto:
Verifique se o primeiro caractere da palavra de entrada é uma vogal. Em caso positivo, anexe "yay" ao final da palavra. Caso contrário, mova o primeiro caractere para o final da palavra e adicione "ay".
Uma última coisa a se observar sobre isso: no F#, não há nenhuma instrução explícita a ser retornada 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 retornado dessa função. Como if..then..else
é uma expressão, a avaliação do corpo do bloco then
ou do corpo do bloco else
determina o valor retornado pela função toPigLatin
.
Transformar o aplicativo de console em um gerador Pig Latin
As seções anteriores neste artigo demonstraram uma primeira etapa comum na gravação do código F#: gravação de uma função inicial e sua execução interativamente com FSI. Isso é conhecido como desenvolvimento controlado por REPL, onde REPL significa "Loop Read-Evaluate-Print". É uma ótima maneira de experimentar a funcionalidade até que você tenha algo funcionando.
A próxima etapa no desenvolvimento controlado por REPL é mover o código de trabalho para um arquivo de implementação do F#. Em seguida, ele pode ser compilado pelo compilador do F# em um assembly que pode ser executado.
Para começar, abra o arquivo Program.fs criado anteriormente com a CLI do .NET. Você observará que já há um código lá.
Em seguida, crie um novo module
chamado PigLatin
e copie a função toPigLatin
criada anteriormente 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 função main
e abaixo da declaração open System
. 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 main
, chame sua função de gerador 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 o aplicativo de console na linha de comando:
dotnet run apple banana
E você verá que ele gera o mesmo resultado que o arquivo de script, mas desta vez como um programa em execução!
Solução de problemas do Ionide
Aqui estão algumas maneiras de solucionar determinados problemas que você pode encontrar:
- Para obter os recursos de edição de código do Ionide, seus arquivos do F# precisam ser salvos no disco e dentro de uma pasta que está aberta no workspace do Visual Studio Code.
- Se você tiver feito alterações no sistema ou instalado pré-requisitos do Ionide com o Visual Studio Code aberto, reinicie o Visual Studio Code.
- Se você tiver caracteres inválidos nos diretórios do projeto, o Ionide poderá não funcionar. Renomeie os diretórios de projeto, se esse for o caso.
- Se nenhum dos comandos do Ionide estiver funcionando, verifique suas Associações de teclas do Visual Studio Code para ver se você está substituindo-os por acidente.
- Se o Ionide tiver sido desfeito em seu computador e nenhuma das opções acima tiver corrigido o problema, tente remover o diretório
ionide-fsharp
em seu computador e reinstalar o conjunto de plug-ins. - Se um projeto não tiver sido carregado (o Gerenciador de Soluções F# exibirá isso), clique com o botão direito do mouse nesse projeto e clique em Ver detalhes para obter mais informações de diagnóstico.
O Ionide é um projeto de código aberto criado e mantido por membros da comunidade do F#. Relate problemas e sinta-se à vontade para contribuir no repositório do GitHub ionide-vscode-fsharp.
Você também pode solicitar mais ajuda dos desenvolvedores do Ionide e da comunidade do F# no canal do Ionide Gitter.
Próximas etapas
Para saber mais sobre o F# e os recursos da linguagem, confira Tour do F#.