F# é uma linguagem de programação universal para escrever código sucinto, robusto e de alto desempenho.
O F# permite que você escreva código organizado e autodocumentado, onde seu foco permanece no domínio do problema, em vez dos detalhes da programação.
Fá-lo sem comprometer a velocidade e a compatibilidade - é de código aberto, multiplataforma e interoperável.
F#
open System // Gets access to functionality in System namespace.// Defines a list of nameslet names = [ "Peter"; "Julia"; "Xi" ]
// Defines a function that takes a name and produces a greeting.let getGreeting name = $"Hello, {name}"// Prints a greeting for each name!
names
|> List.map getGreeting
|> List.iter (fun greeting -> printfn $"{greeting}! Enjoy your F#")
O F# tem vários recursos, incluindo:
Sintaxe leve
Imutável por defeito
Inferência de tipo e generalização automática
Funções de primeira classe
Tipos de dados poderosos
Correspondência de padrões
Programação assíncrona
Um conjunto completo de recursos está documentado no guia de linguagem F#.
Tipos de dados avançados
Tipos como Registros e Uniões Discriminadas permitem que você represente seus dados.
F#
// Group data with RecordstypeSuccessfulWithdrawal=
{ Amount: decimal
Balance: decimal }
typeFailedWithdrawal=
{ Amount: decimal
Balance: decimal
IsOverdraft: bool }
// Use discriminated unions to represent data of 1 or more formstypeWithdrawalResult=
| Success of SuccessfulWithdrawal
| InsufficientFunds of FailedWithdrawal
| CardExpired of System.DateTime
| UndisclosedFailure
Os registros F# e as uniões discriminadas são não-nulos, imutáveis e comparáveis por padrão, tornando-os muito fáceis de usar.
Correção com funções e correspondência de padrões
As funções F# são fáceis de definir. Quando combinados com a correspondência de padrões, eles permitem definir um comportamento cuja correção é imposta pelo compilador.
F#
// Returns a WithdrawalResultlet withdrawMoney amount = // Implementation elidedlet handleWithdrawal amount =
let w = withdrawMoney amount
// The F# compiler enforces accounting for each case!match w with
| Success s -> printfn $"Successfully withdrew %f{s.Amount}"
| InsufficientFunds f -> printfn $"Failed: balance is %f{f.Balance}"
| CardExpired d -> printfn $"Failed: card expired on {d}"
| UndisclosedFailure -> printfn "Failed: unknown :("
As funções F# também são de primeira classe, o que significa que podem ser passadas como parâmetros e retornadas de outras funções.
Funções para definir operações em objetos
O F# tem suporte total para objetos, que são úteis quando você precisa mesclar dados e funcionalidades. Membros e funções F# podem ser definidos para manipular objetos.
F#
typeSet<'T when 'T: comparison>(elements: seq<'T>) =
member s.IsEmpty = // Implementation elidedmember s.Contains (value) =// Implementation elidedmember s.Add (value) = // Implementation elided// ...// Further Implementation elided// ...interface IEnumerable<'T>
interface IReadOnlyCollection<'T>
module Set =
let isEmpty (set: Set<'T>) = set.IsEmpty
let contains element (set: Set<'T>) = set.Contains(element)
let add value (set: Set<'T>) = set.Add(value)
Em F#, você geralmente escreverá código que trata objetos como um tipo para funções a serem manipuladas. Recursos como interfaces genéricas, expressões de objeto e uso criterioso de membros são comuns em programas F# maiores.
Próximos passos
Para saber mais sobre um conjunto maior de recursos do F#, confira o F# Tour.
Colabore connosco no GitHub
A origem deste conteúdo pode ser encontrada no GitHub, onde também pode criar e rever problemas e pedidos Pull. Para mais informações, consulte o nosso guia do contribuidor.
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários:
F# é uma linguagem de programação de código aberto e multiplataforma que facilita a escrita de código sucinto, eficiente, robusto e prático. É uma linguagem de uso geral que permite criar muitos tipos diferentes de aplicativos, como API da Web, Desktop, IoT, jogos e muito mais.