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!