Guia de estilo F#

Os seguintes artigos descrevem diretrizes para a formatação do código F# e orientação tópica para as características do idioma e como devem ser utilizadas.

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

Cinco princípios do 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. Cada orientação em outros artigos provém destes cinco pontos.

  1. Bom código F# é sucinta, expressiva e composível

    F# tem muitas funcionalidades que lhe permitem expressar ações em menos linhas de código e reutilizar a funcionalidade genérica. A biblioteca central F# também contém muitos tipos e funções úteis para trabalhar com recolhas comuns de dados. A composição das suas próprias funções e das da biblioteca central F#(ou outras bibliotecas) faz parte da programação idiomática de rotina F#. Regra geral, se conseguires expressar uma solução para um problema em menos linhas de código, outros desenvolvedores (ou o teu futuro eu) ficarão gratos. Também é altamente recomendado que utilize uma biblioteca como FSharp.Core, as vastas bibliotecas .NET em que F# funciona, ou um pacote de terceiros no NuGet quando precisa de fazer uma tarefa não trivial.

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

    A interoperação pode assumir várias formas, incluindo o código de consumo em diferentes línguas. Os limites do seu código com os qual outros chamadores interoperam são peças críticas para acertar, mesmo que os chamadores também estejam em F#. Ao escrever F#, deve estar sempre a pensar em como outro código irá ligar para o código que está a escrever, incluindo se o fizerem a partir de outra língua como C#. As Diretrizes de Design de Componentes F# descrevem a interoperabilidade em detalhe.

  3. Bom código F# faz uso da programação de objetos, não orientação de 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 um código funcional mais complicado, como funções que devem estar conscientes do contexto, os objetos podem facilmente encapsular informação contextual de formas que as funções não podem. Funcionalidades como parâmetros opcionais e utilização cuidadosa da sobrecarga podem facilitar o consumo desta funcionalidade para quem telefona.

  4. Bom código F# funciona bem sem expor mutação

    Não é segredo que para escrever código de alto desempenho, deve usar mutação. Afinal de contas, é assim que os computadores funcionam. Este código é frequentemente propenso a erros e difícil de acertar. Evite expor mutação aos chamadores. Em vez disso, construa uma interface funcional que esconda uma implementação baseada em mutação quando o desempenho é crítico.

  5. O bom código F# é viável

    As ferramentas são inestimáveis para trabalhar em grandes bases de código, e pode escrever código F# de modo a que possa ser usado de forma mais eficaz com a ferramenta linguística F#. Um exemplo é garantir que não exagere com um estilo de programação sem pontos, para que os valores intermédios possam ser inspecionados com um depurado. Outro exemplo é a utilização de comentários de documentação XML que descrevem construções de tal forma que as pontas de ferramentas nos editores podem exibir esses comentários no site de chamadas. Pense sempre em como o seu código será lido, navegado, depurado e manipulado por outros programadores com as suas ferramentas.

Passos seguintes

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

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

As diretrizes de design de componentes F# fornecem orientações para a autoria de componentes F#, como bibliotecas.