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. Visite Ionide.io para saber mais sobre o plug-in.
Nota
Antes de começar, verifique se você instalou F# e o plug-in Ionide.
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 do Gerenciador de Soluções F# no lado esquerdo da janela aberto. Isso significa que o Ionide carregou com êxito o projeto que você acabou de criar. Você pode escrever código no editor antes desse ponto no tempo, mas depois que isso acontecer, tudo terminará de ser carregado.
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 novo 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á-lo usando FSI (F# Interativo).
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 que você enviou.
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 seguinte resultado:
val it: string = "ananabay"
Agora, vamos tentar com uma vogal como a primeira letra. Insira o seguinte:
toPigLatin "apple";;
Você deverá 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 avaliou-a 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 é 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. As regras para isso 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" a ele.
Talvez você tenha notado o seguinte no FSI:
val toPigLatin: word: string -> string
Isso afirma que toPigLatin
é uma função que usa uma string
como entrada (chamada word
) e retorna outra string
. Isso é conhecido como a assinatura do tipo da função, uma parte fundamental de F# que é a chave 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 determinado caractere (c
) é uma vogal verificando se corresponde a um dos padrões fornecidos por meio 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
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
é assim:
Verifique se o primeiro caractere da palavra de entrada é uma vogal. Se for, adicione "yay" ao final da palavra. Caso contrário, mova o primeiro caractere para o final da palavra e adicione "ay" a ele.
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 escrita de código F#: escrever uma função inicial e executá-la 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 F#. Em seguida, ele pode ser compilado pelo compilador F# em um assembly que pode ser executado.
Para começar, abra o arquivo
Em seguida, crie um novo module
chamado PigLatin
e copie a função toPigLatin
que você criou anteriormente nele 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 de 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 seu 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 F# precisam ser salvos em disco e dentro de uma pasta aberta no workspace do Visual Studio Code.
- Se você fez alterações no sistema ou instalou 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 seus 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 estiver quebrado no computador e nenhum dos itens acima tiver corrigido o problema, tente remover o diretório
ionide-fsharp
em seu computador e reinstale o pacote de plug-ins. - Se um projeto não tiver sido carregado (o Gerenciador de Soluções F# mostrará isso), clique com o botão direito do mouse nesse projeto e clique em Veja os detalhes para obter mais informações de diagnóstico.
O Ionide é um projeto de software livre criado e mantido por membros da comunidade F#. Relate problemas e sinta-se à vontade para contribuir no repositório GitHub ionide-vscode-fsharp.
Você também pode solicitar mais ajuda dos desenvolvedores do Ionide e da comunidade F# no canal Ionide Gitter.
Próximas etapas
Para saber mais sobre F# e os recursos da linguagem, confira Tour de F#.