F # - sintaxe básica

Você viu a estrutura básica de um programa F #, então será fácil entender outros blocos de construção básicos da linguagem de programação F #.

Tokens em F #

Um programa F # consiste em vários tokens. Um token pode ser uma palavra-chave, um identificador, uma constante, um literal de string ou um símbolo. Podemos categorizar os tokens F # em dois tipos -

  • Keywords
  • Símbolo e operadores

Palavras-chave F #

A tabela a seguir mostra as palavras-chave e breves descrições das palavras-chave. Discutiremos o uso dessas palavras-chave nos capítulos subsequentes.

Palavra-chave Descrição
abstract Indica um método que não possui implementação no tipo em que foi declarado ou que é virtual e possui uma implementação padrão.
and Usado em associações mutuamente recursivas, em declarações de propriedade e com várias restrições em parâmetros genéricos.
as Usado para dar ao objeto de classe atual um nome de objeto. Também é usado para dar um nome a um padrão inteiro dentro de uma correspondência de padrão.
assert Usado para verificar o código durante a depuração.
base Usado como o nome do objeto da classe base.
begin Na sintaxe detalhada, indica o início de um bloco de código.
class Na sintaxe detalhada, indica o início de uma definição de classe.
default Indica uma implementação de um método abstrato; usado junto com uma declaração de método abstrato para criar um método virtual.
delegate Usado para declarar um delegado.
do Usado em construções de loop ou para executar código imperativo.
done Na sintaxe detalhada, indica o fim de um bloco de código em uma expressão de loop.
downcast Usado para converter para um tipo que é inferior na cadeia de herança.
downto Em um for expressão, usada na contagem reversa.
elif Usado em ramificação condicional. Uma forma abreviada de else if.
else Usado em ramificação condicional.
end

Em definições de tipo e extensões de tipo, indica o final de uma seção de definições de membro.

Na sintaxe detalhada, usada para especificar o final de um bloco de código que começa com a palavra-chave begin.

exception Usado para declarar um tipo de exceção.
extern Indica que um elemento de programa declarado é definido em outro binário ou assembly.
false Usado como um literal booleano.
finally Usado junto com tentar introduzir um bloco de código que é executado independentemente da ocorrência de uma exceção.
for Usado em construções de loop.
fun Usado em expressões lambda, também conhecidas como funções anônimas.
function Usado como uma alternativa mais curta para a palavra-chave fun e uma expressão de correspondência em uma expressão lambda que possui correspondência de padrão em um único argumento.
global Usado para fazer referência ao namespace .NET de nível superior.
if Usado em construções de ramificação condicional.
in Usado para expressões de sequência e, em sintaxe detalhada, para separar expressões de ligações.
inherit Usado para especificar uma classe base ou interface base.
inline Usado para indicar uma função que deve ser integrada diretamente no código do chamador.
interface Usado para declarar e implementar interfaces.
internal Usado para especificar que um membro é visível dentro de uma montagem, mas não fora dela.
lazy Usado para especificar um cálculo que deve ser executado apenas quando um resultado é necessário.
let Usado para associar ou vincular um nome a um valor ou função.
let! Usado em fluxos de trabalho assíncronos para vincular um nome ao resultado de um cálculo assíncrono ou, em outras expressões de cálculo, usado para vincular um nome a um resultado, que é do tipo de cálculo.
match Usado para ramificar comparando um valor a um padrão.
member Usado para declarar uma propriedade ou método em um tipo de objeto.
module Usado para associar um nome a um grupo de tipos, valores e funções relacionados, para separá-lo logicamente de outro código.
mutable Usado para declarar uma variável, ou seja, um valor que pode ser alterado.
namespace Usado para associar um nome a um grupo de tipos e módulos relacionados, para separá-lo logicamente de outro código.
new

Usado para declarar, definir ou invocar um construtor que cria ou pode criar um objeto.

Também usado em restrições de parâmetro genérico para indicar que um tipo deve ter um determinado construtor.

not Na verdade, não é uma palavra-chave. No entanto, nenhuma estrutura em combinação é usada como uma restrição de parâmetro genérico.
null

Indica a ausência de um objeto.

Também usado em restrições de parâmetros genéricos.

of Usado em uniões discriminadas para indicar o tipo de categorias de valores e em declarações de delegados e exceções.
open Usado para disponibilizar o conteúdo de um namespace ou módulo sem qualificação.
or

Usado com condições booleanas como um booleano ou operador. Equivalente a ||.

Também usado em restrições de membros.

override Usado para implementar uma versão de um método abstrato ou virtual que difere da versão base.
private Restringe o acesso a um membro para codificar no mesmo tipo ou módulo.
public Permite acesso a um membro de fora do tipo.
rec Usado para indicar que uma função é recursiva.
return Usado para indicar um valor a ser fornecido como resultado de uma expressão de cálculo.
return! Usado para indicar uma expressão de cálculo que, quando avaliada, fornece o resultado da expressão de cálculo que contém.
select Usado em expressões de consulta para especificar quais campos ou colunas extrair. Observe que esta é uma palavra-chave contextual, o que significa que não é realmente uma palavra reservada e só atua como uma palavra-chave no contexto apropriado.
static Usado para indicar um método ou propriedade que pode ser chamada sem uma instância de um tipo, ou um membro de valor que é compartilhado entre todas as instâncias de um tipo.
struct

Usado para declarar um tipo de estrutura.

Também usado em restrições de parâmetros genéricos.

Usado para compatibilidade OCaml em definições de módulo.

then

Usado em expressões condicionais.

Também é usado para realizar efeitos colaterais após a construção do objeto.

to Usado em loops for para indicar um intervalo.
true Usado como um literal booleano.
try Usado para introduzir um bloco de código que pode gerar uma exceção. Usado em conjunto com com ou finalmente.
type Usado para declarar uma classe, registro, estrutura, união discriminada, tipo de enumeração, unidade de medida ou abreviação de tipo.
upcast Usado para converter para um tipo que é mais alto na cadeia de herança.
use Usado em vez de let para valores que requerem Dispose para serem chamados para liberar recursos.
use! Usado em vez de let! em fluxos de trabalho assíncronos e outras expressões de computação para valores que requerem Dispose para ser chamado para liberar recursos.
val Usado em uma assinatura para indicar um valor, ou em um tipo para declarar um membro, em situações limitadas.
void Indica o tipo de vazio do .NET. Usado ao interoperar com outras linguagens .NET.
when Usado para condições booleanas (quando guarda) em correspondências de padrão e para introduzir uma cláusula de restrição para um parâmetro de tipo genérico.
while Apresenta uma construção de loop.
with Usado junto com a palavra-chave match em expressões de correspondência de padrões. Também usado em expressões de objeto, expressões de cópia de registro e extensões de tipo para apresentar definições de membro e para introduzir manipuladores de exceção.
yield Usado em uma expressão de sequência para produzir um valor para uma sequência.
yield! Usado em uma expressão de computação para anexar o resultado de uma determinada expressão de computação a uma coleção de resultados para a expressão de computação contida.

Algumas palavras-chave reservadas vêm da linguagem OCaml -

asr terra lor lsl lsr lxor mod sig

Algumas outras palavras-chave reservadas são mantidas para expansão futura do F #.

atômico pausa verificado componente const restrição constructor
continue eager event external fixed functor include
method mixin object parallel process protected pure
sealed tailcall trait virtual volatile

Comments in F#

F# provides two types of comments −

  • One line comment starts with // symbol.
  • Multi line comment starts with (* and ends with *).

A Basic Program and Application Entry Point in F#

Generally, you don’t have any explicit entry point for F# programs. When you compile an F# application, the last file provided to the compiler becomes the entry point and all top level statements in that file are executed from top to bottom.

A well-written program should have a single top-level statement that would call the main loop of the program.

A very minimalistic F# program that would display ‘Hello World’ on the screen −

(* This is a comment *)
(* Sample Hello World program using F# *)
printfn "Hello World!"

When you compile and execute the program, it yields the following output −

Hello World!