F Sharp

linguagem de programação
 Nota: o título deste verbete seria F#. Porém, devido a limitações técnicas sobre o uso de cerquilhas em títulos, utilizou-se F Sharp.
 Nota: Este artigo é sobre a linguagem de programação. Para a nota/acorde musical, veja Fá sustenido.

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 2019 e como parte do .NET.

F#
Paradigma
Surgido em 2005 (18–19 anos)
Última versão 8.0.0 (14 de novembro de 2023; há 11 meses)
Criado por
Estilo de tipagem
  • estática
  • forte
  • inferida
Influenciada por
Licença Licença MIT[2]
Extensão do arquivo
  • .fs
  • .fsi
  • .fsx
  • .fsscript
Página oficial fsharp.org

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

editar

Programação funcional

editar

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

editar

F# para programação de forma imperativa suporta:

  • for loops
  • while loops
  • arrays
  • hash table

Valores e campos gravados podem ser mutáveis, por exemplo:

// definindo 'x' com valor inicial '1'
let mutable x = 1
// Mudando o valor de 'x' para '3'
x <- 3

Programação orientado a objetos

editar

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.Nome)
  • 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)

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.[3]

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

/// Uma declação de um simples objeto
type Person(nome : string, idade : int) =
    member x.Nome = nome
    member x.Idade = idade

Programação assíncrona

editar

F# suporta programação assíncrona através de fluxos de trabalho assíncronos. Um fluxo de trabalho assíncrona é definida como uma seqüência de comandos dentro de um {async ... }, por exemplo:

let asynctask url =
    async { 
        let pedido = WebRequest.Create(url)
        let! resposta = pedido.GetResponseAsync()
        use fluxoDeResposta = resposta.GetResponseStream()
        use leitorDeFluxo = new System.IO.StreamReader(fluxoDeResposta)
        return leitorDeFluxo.ReadToEnd()
    }

Programação paralela

editar

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

editar

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

editar

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.

Publicação do código fonte

editar

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.[4] O compilador e as bibliotecas estão agora disponíveis como um repositório no GitHub[5]

Ferramentas de Desenvolvimento

editar

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

editar

Desenvolvimento Web

editar

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

editar

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

Comunidade de Código Aberto

editar

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

História

editar

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

editar
Programa Olá Mundo
printfn "Olá, Mundo!"
Lista com três inteiros
let list = [ 1; 2; 3 ]
União discriminada
type UniaoDiscriminada =
   | Item1
   | Item2 of int * int
   | Item3 of valor1: string * valor2: int
Criando uma classe
type Person(name : string, age : int) =
    member x.Name = name
    member x.Age = age

Ver também

editar

Referências

  1. Syme, Granicz & Cisternino (2007):2 "F# also draws from Haskell particularly with regard to two advanced language features called sequence expressions and workflows."
  2. «Licensa do F#» 
  3. «Pattern Matching in F# Part 2 : Active Patterns». Consultado em 24 de novembro de 2012 
  4. Announcing the F# Compiler + Library Source Code Drop (em inglês)
  5. «dotnet/fsharp». Consultado em 8 de junho de 2021 

Bibliografia

editar
  • (em inglês) Expert F# - Antonio Cisternino, Adam Granicz, Don Syme - 2007 - Apress

Ligações externas

editar