F# Sintaxe
A sintaxe do F# é conhecida por sua concisão, o que torna a codificação concisa e legível. Ao longo deste artigo, abordaremos a sintaxe básica do F#, incluindo tokens e palavras-chave, que compõem a linguagem.
Não importa se você está apenas começando ou se é um desenvolvedor experiente procurando aprender um novo idioma, este artigo fornecerá a você uma base sólida na sintaxe do F# .
Sintaxe do F# – Tokens
F# é uma linguagem de programação que usa tokens como suas unidades básicas de sintaxe para a criação de sentenças, expressões e outras construções lógicas significativas.
Existem vários tokens e maneiras pelas quais um token pode ser usado, inclusive como uma palavra-chave , identificador , constante , string literal ou símbolo .
Para categorizar os tokens F# , podemos dividi-los em duas categorias:
- Palavras-chave
- Símbolos e operadores
Palavras-chave F#
Esta tabela fornece uma lista das palavras-chave, bem como uma breve descrição de cada palavra-chave.
Em nossos próximos capítulos, veremos como essas palavras-chave são usadas e como usá-las de forma eficaz.
Palavras-chave | Visão geral |
abstrato | O valor deste campo indica se o método possui implementação no tipo da classe em que foi declarado ou se possui implementação padrão para o tipo da classe. |
e | Um parâmetro genérico pode ser usado em associações nas quais os parâmetros são mutuamente recursivos, para declarar propriedades ou para definir várias restrições nos parâmetros genéricos. |
como | Os nomes de objeto são atribuídos ao objeto de classe atual usando esse método. Da mesma forma, é usado em uma correspondência de padrão para dar um nome a um padrão inteiro dentro dessa correspondência. |
afirmar | O objetivo dessa palavra-chave é verificar o código durante o processo de depuração. |
base | Objetos da classe base são chamados por este nome. |
começar | Uma entrada na sintaxe detalhada indicará o início de um novo bloco de código. |
aula | Isso significa o início de uma definição de uma classe na sintaxe detalhada. |
padrão | Para criar um método virtual, ele é usado junto com uma declaração de um método abstrato para indicar uma implementação do método abstrato. |
delegar | Delegados são declarados usando este método. |
fazer | Construções de loop e execução de código imperativo são feitas com esta função. |
feito | Se você estiver usando uma sintaxe detalhada, isso indica que a expressão de loop chegou ao fim. |
abatido | Um tipo pode ser convertido em um tipo com menor herança. |
até | Ao contar ao contrário, é usado em uma expressão for . |
elif | Isso é usado no caso de ramificação condicional. A forma abreviada de se houver algo mais do que se. |
outro | O método de ramificação condicional usa essa função. |
fim | Uma seção de definições de membro termina com este símbolo em definições de tipo e extensões de tipo.
A palavra-chave end é usada na sintaxe detalhada para indicar o final de um bloco de código que começa com begin. |
exceção | Um tipo de exceção pode ser declarado usando esta função. |
externo | Indica que outro binário ou assembly define o elemento de programa declarado. |
falso | É usado para representar uma expressão booleana. |
finalmente | A combinação disso com try é usada para criar um bloco de código que é executado independentemente de haver uma exceção ou não. |
global | Refere-se ao namespace .NET de nível superior. |
se | Construtos que operam em ramificações condicionais. |
em | Isso é comumente usado para expressões de sequência, bem como para separar expressões e associações em sintaxe detalhada. |
herdar | Uma interface ou classe base pode ser especificada usando este método. |
em linha | Esta função é utilizada para indicar que deve ser integrada diretamente no código que está sendo chamado. |
interface | As interfaces são declaradas e implementadas usando esse método. |
interno | A finalidade desta propriedade é especificar que um membro é visível dentro da montagem, mas não fora da montagem. |
preguiçoso | Essas especificações referem-se a funções de computação que serão executadas apenas quando um resultado precisar ser calculado. |
deixar | Isso é usado na associação de um nome a um valor ou função. |
deixar! | Um fluxo de trabalho assíncrono usa um nome para vinculá-los a um resultado de uma computação assíncrona; da mesma forma, uma expressão de computação usa um nome para vincular a um resultado. |
corresponder | Ramos comparando valores com padrões. |
membro | Um tipo de objeto é usado para declarar propriedades e métodos. |
módulo | Geralmente, é usado como um meio de separar logicamente um grupo de tipos, valores e funções, a serem associados a um determinado nome. |
mutável | O valor da declaração da variável que pode ser alterado. |
namespace | Separa logicamente um nome de outro código associando-o a tipos relacionados. |
novo | Cria ou pode criar um objeto declarando, definindo ou invocando um construtor.
Além disso, isso também pode ser usado em restrições de parâmetros genéricos como uma indicação do construtor que deve ser fornecido para um tipo. |
não | Isso não é realmente uma palavra-chave. No entanto, nem todo struct pode ser usado como uma restrição de parâmetro genérico em combinação com outro struct. |
nulo | A ausência de um objeto é indicada por este valor.
Restrições de parâmetros usadas em genéricos. |
de | Delegados e declarações de exceção usam isso para indicar o tipo de categorias de valores. |
abrir | Um acesso não qualificado a um namespace ou módulo é o ato de disponibilizar seu conteúdo sem qualificação. |
ou | Os operadores booleanos são usados para operar em condições que possuem valores booleanos. O mesmo que o símbolo ||. Isso também pode ser usado como uma restrição em um membro. |
sobrepor | Pode ser usado para implementar diferentes versões de um método abstrato ou virtual, que são diferentes da versão original. |
privado | Um membro só pode acessar o código que faz parte do mesmo tipo ou módulo que o membro. |
público | Esse tipo permite acesso aos membros do tipo de fora do tipo. |
gravando | Significa a natureza recursiva de uma função. |
retornar | Um valor é usado para indicar um valor que foi retornado devido ao cálculo de uma expressão. |
retornar! | Uma expressão que representa uma computação é usada para indicar que, após a avaliação, o resultado da expressão que contém a computação é retornado. |
selecionar | É usado para especificar quais campos ou colunas devem ser extraídos como parte de uma expressão de consulta. Ao contrário das palavras reservadas, as palavras-chave sensíveis ao contexto não são palavras reservadas e atuam apenas como palavras-chave no contexto apropriado. |
estático | Métodos e propriedades acessíveis sem exigir uma instância ou membros de valor que são compartilhados entre as instâncias. |
estrutura | Declara um tipo de estrutura.
Isso também pode ser usado para restringir parâmetros genéricos. As definições do módulo devem ser compatíveis com OCaml. |
então | As condições são expressas usando esta expressão.
Executa efeitos colaterais depois de construir um objeto também. |
para | Usado em loops for para indicar um intervalo. |
verdadeiro | Na lógica booleana, esta variável é usada. |
tentar | Blocos de código geradores de exceção são introduzidos usando essa técnica. Juntamente com ou finalmente. |
tipo | É usado para identificar classes, registros, estruturas, uniões discriminadas, tipos de enumeração, unidade de medida ou abreviações de tipo. |
upcast | Converte um tipo de nível inferior de herança em um tipo superior na hierarquia de herança. |
usar | Este método deve ser usado em vez de let se houver necessidade de Dispose ser chamado para liberar recursos. |
usar! | Deve ser usado em vez de let! Ele é usado para fluxos de trabalho assíncronos e outras expressões de computação em que é necessário liberar recursos chamando Dispose. |
val | A declaração de um membro em tipo ou assinatura, em situações limitadas. |
vazio | Esse tipo representa o tipo void no .NET. Interopera com outras linguagens que usam .NET. |
quando | Condições booleanas podem ser usadas (para correspondências de padrão) e restrições podem ser introduzidas para parâmetros de tipo genérico. |
enquanto | Este módulo apresenta o conceito de looping. |
com | Usado em expressões de correspondência de padrão junto com a palavra-chave match. A saída dessa função é usada não apenas para definir definições de membro, mas também para introduzir manipuladores de exceção, que podem ser usados em expressões de objeto, expressões de cópia de registro e extensões de tipo. |
colheita | Para produzir um valor para uma sequência, essa expressão é usada em uma expressão de sequência. |
colheita! | Em uma expressão de cálculo, esse tipo de parâmetro é usado para anexar o resultado de uma expressão de cálculo a uma coleção de resultados para a expressão de cálculo na qual é usado. |
Existem algumas palavras-chave reservadas que são retiradas da linguagem OCaml:
asr | terra | lor | lsl | lsr | lsr | mod | assinar |
Ainda existem algumas palavras-chave reservadas que são retidas para futuras expansões do F#.
atômico | quebrar | verificado | componente | const | limitação | constructor |
continuar | ansioso | evento | externo | fixo | funtor | funtor |
método | mixin | mixin | paralelo | processo | protegido | puro |
selado | chamada traseira | característica | virtual | volátil |
F# Comentários
Um comentário em F# pode ser classificado em dois tipos:
- Um comentário de linha única começa com o símbolo // .
- Comentários com várias linhas começam com ( * e terminam com * ).
Um programa básico e um ponto de entrada do aplicativo em F#
Para programas F#, geralmente você não tem nenhum ponto de entrada explícito que possa usar para executá-los.
Os aplicativos F# são compilados a partir do último arquivo enviado ao compilador. De cima para baixo, todas as instruções no nível superior do arquivo são executadas nessa ordem.
O loop principal de um programa é chamado por meio de uma instrução de nível superior do programa. Um programa bem escrito deve ter apenas uma instrução em seu nível superior.
Usando o código a seguir, você pode exibir a mensagem “Hello from mrexamples!” na tela em um código F# mínimo:
Example:
Ao compilar e executar o programa, ele produz a seguinte saída como resultado:
Hello from mrexamples!
Se gostou deste artigo e o achou informativo, pode subscrever a nossa newsletter abaixo.