Partilhar via


Guia de estilo do F#

Os artigos a seguir descrevem diretrizes para formatação de código F# e orientações tópicas para recursos da linguagem e como eles devem ser usados.

Esta orientação foi formulada com base no uso de F# em grandes bases de código com um grupo diversificado de programadores. Essa orientação geralmente leva ao uso bem-sucedido do F# e minimiza as frustrações quando os requisitos para programas mudam ao longo do tempo.

Cinco princípios de um bom código F#

Tenha em mente os seguintes princípios sempre que escrever código F#, especialmente em sistemas que mudarão ao longo do tempo. Todas as orientações contidas em outros artigos derivam desses cinco pontos.

  1. Um bom código F# é sucinto, expressivo e compostável

    O F# tem muitos recursos que permitem expressar ações em menos linhas de código e reutilizar funcionalidades genéricas. A biblioteca principal do F# também contém muitos tipos e funções úteis para trabalhar com coleções comuns de dados. A composição das suas próprias funções e das da biblioteca principal do F# (ou de outras bibliotecas) é parte integrante da programação idiomática em F#. Como regra geral, se você puder expressar uma solução para um problema em menos linhas de código, outros desenvolvedores (ou seu eu futuro) serão apreciados. Também é altamente recomendável que você use uma biblioteca como FSharp.Core, as vastas bibliotecas .NET nas quais o F# é executado ou um pacote de terceiros no NuGet quando precisar executar uma tarefa não trivial.

  2. Um bom código F# é interoperável

    A interoperação pode assumir várias formas, incluindo o consumo de código em diferentes idiomas. Os limites do seu código com os quais outros chamadores interoperam são partes críticas para acertar, mesmo que os chamadores também estejam em F#. Ao escrever F#, você deve estar sempre pensando em como outro código chamará o código que você está escrevendo, inclusive se eles o fizerem de outra linguagem como C#. As Diretrizes de Design de Componentes F# descrevem a interoperabilidade em detalhes.

  3. Um bom código F# faz uso de programação de objetos, não de orientação a objetos

    F# tem suporte total para programação com objetos em .NET, incluindo classes, interfaces, modificadores de acesso, classes abstratas e assim por diante. Para códigos funcionais mais complicados, como funções que devem reconhecer o contexto, os objetos podem facilmente encapsular informações contextuais de maneiras que as funções não podem. Recursos como parâmetros opcionais e uso cuidadoso de sobrecarga podem facilitar o consumo dessa funcionalidade para os chamadores.

  4. Um bom código F# funciona bem sem expor mutações

    Não é segredo que para escrever código de alto desempenho, você deve usar mutação. Afinal, é assim que os computadores funcionam. Esse código é muitas vezes propenso a erros e difícil de acertar. Evite expor a mutação aos chamadores. Em vez disso, crie uma interface funcional que oculte uma implementação baseada em mutação quando o desempenho for crítico.

  5. Um bom código F# pode ser usado com ferramentas

    As ferramentas são inestimáveis para trabalhar em grandes bases de código, e você pode escrever código F# para que ele possa ser usado de forma mais eficaz com ferramentas de linguagem F#. Um exemplo é garantir que você não exagere com um estilo de programação sem pontos, para que os valores intermediários possam ser inspecionados com um depurador. Outro exemplo é o uso de comentários de documentação XML descrevendo construções para que os tooltips dos editores possam exibir esses comentários no local da chamada. Sempre pense em como seu código será lido, navegado, depurado e manipulado por outros programadores com suas ferramentas.

Próximos passos

As diretrizes de formatação de código F# fornecem orientação sobre como formatar o código para que seja fácil de ler.

As convenções de codificação F# fornecem orientação para expressões de programação F# que ajudarão a manutenção a longo prazo de bases de código F# maiores.

As diretrizes de design de componentes F# fornecem orientação para a criação de componentes F#, como bibliotecas.