Compartilhar via


Literais

Este artigo fornece uma tabela que mostra como especificar o tipo de um literal em F#.

Tipos literais

A tabela a seguir mostra os tipos literais em F#. Caracteres que representam dígitos em notação hexadecimal não diferenciam maiúsculas de minúsculas e caracteres que identificam o tipo diferenciam maiúsculas de minúsculas.

Tipo Descrição Sufixo ou prefixo Exemplos
sbyte inteiro de 8 bits assinado a 86y

0b00000101y
byte número natural de 8 bits não assinado uy 86uy

0b00000101uy
int16 Inteiro de 16 bits assinado s 86s
uint16 número natural de 16 bits não assinado us 86us
INT

int32
Inteiro de 32 bits assinado l ou nenhum 86

86l
uint

uint32
número natural de 32 bits não assinado u ou ul 86u

86ul
nativeint ponteiro nativo para um número natural assinado n 123n
unativeint ponteiro nativo como um número natural não assinado un 0x00002D3Fun
int64 Inteiro de 64 bits assinado L 86L
uint64 número natural de 64 bits não assinado UL 86UL
single, float32 número de ponto flutuante de 32 bits F ou f 4.14F ou 4.14f ou infinityf ou -infinityf
Se 0x00000000lf
float; double número de ponto flutuante de 64 bits nenhum 4.14 ou 2.3E+32 ou 2.3e+32 ou infinity ou -infinity
LF 0x0000000000000000LF
BIGINT inteiro não limitado à representação de 64 bits I 9999999999999999999999999999I
decimal número fracionário representado como um ponto fixo ou número racional M ou m 0.7833M ou 0.7833m
Char Caractere unicode nenhum 'a' ou '\u0061'
String Cadeia de caracteres Unicode nenhum "text\n"

ou

@"c:\filename"

ou

"""<book title="Paradise Lost">"""

ou

"string1" + "string2"

Consulte também Cadeias de Caracteres.
byte Caractere ASCII B 'a'B
byte[] Cadeia de caracteres ASCII B "text"B
Cadeia de caracteres ou byte[] cadeia de caracteres verbatim prefixo @ @"\\server\share" (Unicode)

@"\\server\share"B (ASCII)

Literais nomeados

Valores destinados a serem constantes poderão ser marcados com o atributo Literal .

Este atributo compila um valor como uma constante. No exemplo a seguir, tanto x quanto y abaixo são valores imutáveis, mas x é avaliado em tempo de execução, enquanto y é uma constante de tempo de compilação.

let x = "a" + "b" // evaluated at run-time

[<Literal>]
let y = "a" + "b" // evaluated at compile-time

Por exemplo, essa distinção é importante ao chamar uma função externa, pois DllImport é um atributo que precisa saber o valor de myDLL durante a compilação. Sem a declaração [<Literal>], esse código falharia ao compilar:

[<Literal>]
let myDLL = "foo.dll"

[<DllImport(myDLL, CallingConvention = CallingConvention.Cdecl)>]
extern void HelloWorld()

Em expressões de correspondência de padrões, os identificadores que começam com caracteres minúsculos são sempre tratados como variáveis a serem vinculadas, em vez de literais, portanto, geralmente é necessário usar letras maiúsculas iniciais ao definir literais.

[<Literal>]
let SomeJson = """{"numbers":[1,2,3,4,5]}"""

[<Literal>]
let Literal1 = "a" + "b"

[<Literal>]
let FileLocation =   __SOURCE_DIRECTORY__ + "/" + __SOURCE_FILE__

[<Literal>]
let Literal2 = 1 ||| 64

[<Literal>]
let Literal3 = System.IO.FileAccess.Read ||| System.IO.FileAccess.Write

Comentários

Literais nomeados são úteis para:

  • Correspondência de padrões sem uma cláusula when.
  • Argumentos de atributo.
  • Argumentos de provedor de tipos estáticos.

As cadeias de caracteres Unicode podem conter codificações explícitas que podem ser especificadas usando \u seguidas por um código hexadecimal de 16 bits (0000 − FFFF) ou codificações UTF-32 que podem ser especificadas usando \U seguido por um código hexadecimal de 32 bits que representa qualquer ponto de código Unicode (00000000 − 0010FFFF).

O uso de operadores bit a bit diferente de ||| não é permitido.

Inteiros em outras bases

Inteiros de 32 bits assinados também podem ser especificados em hexadecimal, octal ou binário usando um prefixo 0x, 0o ou 0b, respectivamente.

let numbers = (0x9F, 0o77, 0b1010)
// Result: numbers : int * int * int = (159, 63, 10)

Sublinhados em literais numéricos

É possível separar os dígitos com o caractere sublinhado (_).

let value = 0xDEAD_BEEF

let valueAsBits = 0b1101_1110_1010_1101_1011_1110_1110_1111

let exampleSSN = 123_45_6789

Valores especiais de infinito em ponto flutuante

Os tipos numéricos de ponto flutuante float e single têm valores especiais associados que representam o infinito positivo e negativo.

Valor F# Tipo F# Valor .NET correspondente
infinity ou +infinity float PositiveInfinity
-infinity float NegativeInfinity
infinityf ou +infinityf single PositiveInfinity
-infinityf single NegativeInfinity

Esses valores podem ser usados diretamente ou são retornados ao dividir por um zero de ponto flutuante ou por um número muito pequeno para ser representado pelo tipo fornecido. Por exemplo:

> 1.0/0.0;;
val it: float = infinity

> 1.0/(-0.0);;
val it: float = -infinity

> 1.0/0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
;;
val it: float = infinity