F# é uma linguagem de programação multiparadigma para a plataforma .NET, que engloba programação funcional, imperativa e orientada a objetos. Pertence à família das linguagens ML, e é em grande parte compatível com a linguagem OCaml. Foi inicialmente desenvolvida por Don Syme na Microsoft Research, e então migrou para a Microsoft Developer Division. É distribuida como parte do Visual Studio 2026 e como parte do .NET.

As propriedades desta linguagem e o seu ambiente constituem uma plataforma ideal para a informática científica porque utiliza a inferência de tipo. A performance de F# iguala-se com a linguagem OCaml, C++ e ML. É uma linguagem criada de propósito para a plataforma .NET e portanto é orientada a objetos.

Visão Geral Programação funcional F# é uma linguagem de programação primeiramente funcional. Os tipos não precisam ser dadas de forma explícita pelo programador, estes são deduzidos no processo de compilação. O comando let é usado para atribuir valores ao nome. Por exemplo: let x = 3 + 4

Programação imperativa F# também suporta programação imperative, com suporte para loops (for e while, mesmo sem break ou continue) e valores mutáveis utilizando a palavra-chave mutable:// definindo 'x' com valor inicial '1' let mutable x = 1 // Mudando o valor de 'x' para '3' x <- 3

Programação orientado a objetos F#, como as outras linguagens CLI, pode-se usar tipos CLI e objetos através da programação orientada a objetos. F# suporta programação voltada à objetos que inclui expressões: Notação de ponto (e.g. x.Name) Expressões de objecto (e.g. { new obj() with member x.ToString() = "Olá!" }) Construção de objecto (e.g. new Form()) Testes de tipo (e.g. x :? string) Coerções de tipo (e.g. x :?> string) Argumentos com nome (e.g. x.Method(someArgument=1)) Argumentos opcionais (e.g. x.Method(optionalArgument=1, ?optionalArgument=Some 1)

Suporte para programação orientada em objetos em padrões inclui: Testes de tipo (e.g. :? string as s) Padrões ativos, que podem ser definidos sobre tipos de objetos.

Objetos em F# podem ser declarados como class, struct, interface ou delegado tipo definidos, correspondentes às formas encontradas no C#. Por exemplo, uma classe com um construtor com "name" e "age" e declarando duas propriedades:

// Uma declação de um simples objeto type Person(name : string, age : int) = member x.Name = name member x.Age = age

Programação assíncrona F# suporta programação assíncrona através de fluxos de trabalho assíncronos. Um fluxo de trabalho assíncrona é definida como uma sequência de comandos dentro de um async { ... }(ou task { ... } para interopabilidade com as Tasks .NET), por exemplo: let fetch url = async { let request = WebRequest.Create(url) let! response = request.GetResponseAsync() use responseStream = resposta.GetResponseStream() use streamReader = new System.IO.StreamReader(responseStream) return streamReader.ReadToEnd() }F# também suporta programação orientada a atores (como em Erlang e Elixir) utilizando o MailboxProcessor:// Tipo de mensagem enviada para o ator type Message = | Increment | Decrement | Get of AsyncReplyChannel<int>

// Cria e inicia o ator let counter = MailboxProcessor.Start(fun inbox -> async { // Loop que recebe uma mensagem let rec loop (count: int) = async { let! message = inbox.Receive() match message with | Increment -> return! loop (count + 1) | Decrement -> return! loop (count - 1) | Contagem channel -> channel.Reply count return! loop count

// Inicia o loop para fazer com que o ator execute indefinidamente return! loop 0 })

counter.Post Increment counter.Post Increment counter.Post Decrement

let count = counter.PostAndReply Get printfn "A contagem é de %i" count // 1

Programação paralela A programação paralela é parcialmente suportado através do Async.Parallel, Async.Start e outras operações que executam o bloco assíncrono em paralelo. A programação paralela também é suportada através de Array.Parallel funcional na biblioteca padrão do F#.

Unidades de medida O sistema de tipos do F# suporta unidades de medida verificando pelos números. A catacterísticas da unidade de medida se integra com o tipo do F# requisitando um mínimo de anotações no código do usuário.

Metaprogramação F# permite algumas formas de customização de sintaxe para suportar códigos de domínio específico sem a linguagem F#, particularmente através de expressões computacionais.

JavaScript F# pode compilar para JavaScript utilizando o compilador Fable (Também pode compilar para outras como Dart, TypeScript, Rust e Python).

Publicação do código fonte Em 4 de novembro de 2010, no blog de Don Syme, foi anunciada a liberação do código fonte sob a licença Apache 2.0.Announcing the F# Compiler + Library Source Code Drop O compilador e as bibliotecas estão agora disponíveis como um repositório no GitHub

Ferramentas de Desenvolvimento Pode-se programar em F# em qualquer editor de texto. Há alguns que possuem suporte específico, como o EMACS. O Visual F# da Microsoft inclui integração total com o Visual Studio. Com o serviço instalado, o Visual Studio pode ser usado para criar em depurar projetos em F#. WebSharper é um framework que permite desenvolver e manter front-ends complexos em JavaScript e HTML5, em F#. MonoDevelop é um ambiente de desenvolvimento integrado que suporta F# em Linux, Mac e Windows, incluindo suporte para o console interativo, como no Visual Studio. Sharp Develop suporta F# desde a versão 3.0. LINQPad suporta F# desde a versão 2.x.

Áreas de Aplicação Desenvolvimento Web F# é usado em conjunto com ASP, .NET, KnockoutJS e outros frameworks para programação Web. F# é o núcleo do WebSharper, onde ele é executado como um código .NET no servidor e como JavaScript no cliente.

Programação Analítica Dentre outras linguagens, F# é utilizado para programação financeira quantitativa, Comércio de energia, BI e jogos do Facebook.

Comunidade de Código Aberto A comunidade de código aberto do F# inclui “The F# Software Foundation” e “F# Open Source Group at GitHub”.

História F# foi desenvolvida e implementada por Don Syme, no Microsoft Research, em Cambridge. Andrew Kennedy contribuiu no desenvolvimento de unidades de medidas. A linguagem F# e as ferramentas Visual F# para Windows são desenvolvidas pela Microsoft. “The F# Software Foundation” desenvolve o compilador de código aberto e ferramentas baseadas em lançamentos de código aberto do “Microsoft Visual F# Team”.

Exemplos de código Programa Olá Mundo printfn "Olá, Mundo!"

Lista com três inteiros let list = [ 1; 2; 3 ]

União discriminada type MyDU = | Item1 | Item2 of int * int | Item3 of value1: string * value: int

Criando uma classe type Person(name : string, age : int) = member x.Name = name member x.Age = age

Tipos nulosWhats new in F# 9 Consultado em 26 de dezembro de 2024 (F# 9) let variable: string | null = null

let checkNull (v: 't | null) = // Função para verificar se uma variável é nula. match v with | null -> true // É nulo. | _ -> false // Não é nulo.

checkNull variable // trueFableopen Fable.Core

// Implementa a função alert(texto) do javascript. [<Global>] let alert: string -> unit = jsNative

// Diz hello world no navegador. alert "Hello World from JS"Unidades de medida[<Measure>] type h // horas [<Measure>] type km // quilômetros

let velocidade = 30.0<km/h>

Ver também C Sharp Alice OCaml Caml ML Standard ML Dependent ML Moscow ML Extended ML

Bibliografia Expert F# - Antonio Cisternino, Adam Granicz, Don Syme - 2007 - Apress

Ligações externas

Categoria:Ferramentas de desenvolvimento da Microsoft Categoria:Linguagens de programação funcionais Categoria:Linguagens de programação .NET Categoria:Softwares multiplataformas Categoria:Linguagens de programação criadas na década de 2000 Categoria:Software livre multiplataforma