Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Apêndice B: Operadores e Símbolos

Este apêndice contém um glossário da sintaxe do Rust, incluindo operadores e outros símbolos que aparecem sozinhos ou no contexto de caminhos, genéricos, limites de trait, macros, atributos, comentários, tuplas e colchetes.

Operadores

A Tabela B-1 contém os operadores do Rust, um exemplo de como cada operador aparece em contexto, uma explicação breve e se esse operador é sobrecarregável. Se um operador for sobrecarregável, o trait relevante para fazer essa sobrecarga também será listado.

Tabela B-1: Operadores

OperadorExemploExplicaçãoSobrecarregável?
!ident!(...), ident!{...}, ident![...]Expansão de macro
!!exprComplemento bit a bit ou lógicoNot
!=expr != exprComparação de desigualdadePartialEq
%expr % exprResto aritméticoRem
%=var %= exprResto aritmético e atribuiçãoRemAssign
&&expr, &mut exprEmpréstimo
&&type, &mut type, &'a type, &'a mut typeTipo de ponteiro emprestado
&expr & exprE bit a bitBitAnd
&=var &= exprE bit a bit e atribuiçãoBitAndAssign
&&expr && exprE lógico com curto-circuito
*expr * exprMultiplicação aritméticaMul
*=var *= exprMultiplicação aritmética e atribuiçãoMulAssign
**exprDesreferênciaDeref
**const type, *mut typePonteiro raw
+trait + trait, 'a + traitRestrição composta de tipo
+expr + exprAdição aritméticaAdd
+=var += exprAdição aritmética e atribuiçãoAddAssign
,expr, exprSeparador de argumentos e elementos
-- exprNegação aritméticaNeg
-expr - exprSubtração aritméticaSub
-=var -= exprSubtração aritmética e atribuiçãoSubAssign
->fn(...) -> type, |…| -> typeTipo de retorno de função e closure
.expr.identAcesso a campo
.expr.ident(expr, ...)Chamada de método
.expr.0, expr.1 e assim por dianteIndexação de tupla
...., expr.., ..expr, expr..exprLiteral de intervalo exclusivo à direitaPartialOrd
..=..=expr, expr..=exprLiteral de intervalo inclusivo à direitaPartialOrd
....exprSintaxe de atualização de literal de struct
..variant(x, ..), struct_type { x, .. }Binding de padrão “e o restante”
...expr...expr(Obsoleto; use ..=) Em um padrão: padrão de intervalo inclusivo
/expr / exprDivisão aritméticaDiv
/=var /= exprDivisão aritmética e atribuiçãoDivAssign
:pat: type, ident: typeRestrições
:ident: exprInicializador de campo de struct
:'a: loop {...}Rótulo de loop
;expr;Terminador de instrução e item
;[...; len]Parte da sintaxe de array de tamanho fixo
<<expr << exprDeslocamento à esquerdaShl
<<=var <<= exprDeslocamento à esquerda e atribuiçãoShlAssign
<expr < exprComparação “menor que”PartialOrd
<=expr <= exprComparação “menor que ou igual a”PartialOrd
=var = expr, ident = typeAtribuição/equivalência
==expr == exprComparação de igualdadePartialEq
=>pat => exprParte da sintaxe de um braço de match
>expr > exprComparação “maior que”PartialOrd
>=expr >= exprComparação “maior que ou igual a”PartialOrd
>>expr >> exprDeslocamento à direitaShr
>>=var >>= exprDeslocamento à direita e atribuiçãoShrAssign
@ident @ patBinding de padrão
^expr ^ exprOU exclusivo bit a bitBitXor
^=var ^= exprOU exclusivo bit a bit e atribuiçãoBitXorAssign
|pat | patAlternativas de padrão
|expr | exprOU bit a bitBitOr
|=var |= exprOU bit a bit e atribuiçãoBitOrAssign
||expr || exprOU lógico com curto-circuito
?expr?Propagação de erro

Símbolos não operadores

As tabelas a seguir contêm todos os símbolos que não funcionam como operadores; isto é, eles não se comportam como chamadas de função ou de método.

A Tabela B-2 mostra símbolos que aparecem sozinhos e são válidos em vários lugares.

Tabela B-2: Sintaxe independente

SímboloExplicação
'identLifetime nomeado ou rótulo de loop
Dígitos imediatamente seguidos por u8, i32, f64, usize etc.Literal numérico de um tipo específico
"..."Literal de string
r"...", r#"..."#, r##"..."## etc.Literal de string raw; caracteres de escape não são processados
b"..."Literal de string de bytes; constrói um array de bytes em vez de uma string
br"...", br#"..."#, br##"..."## etc.Literal de string raw de bytes; combinação de literal raw e literal de string de bytes
'...'Literal de caractere
b'...'Literal de byte ASCII
|…| exprClosure
!Tipo bottom sempre vazio para funções divergentes
_Binding de padrão “ignorado”; também usado para tornar literais inteiros mais legíveis

A Tabela B-3 mostra símbolos que aparecem no contexto de um caminho pela hierarquia de módulos até um item.

Tabela B-3: Sintaxe relacionada a caminhos

SímboloExplicação
ident::identCaminho de namespace
::pathCaminho relativo à raiz da crate (isto é, um caminho explicitamente absoluto)
self::pathCaminho relativo ao módulo atual (isto é, um caminho explicitamente relativo)
super::pathCaminho relativo ao pai do módulo atual
type::ident, <type as trait>::identConstantes, funções e tipos associados
<type>::...Item associado de um tipo que não pode ser nomeado diretamente (por exemplo, <&T>::..., <[T]>::... etc.)
trait::method(...)Desambiguar uma chamada de método nomeando o trait que a define
type::method(...)Desambiguar uma chamada de método nomeando o tipo para o qual ela está definida
<type as trait>::method(...)Desambiguar uma chamada de método nomeando o trait e o tipo

A Tabela B-4 mostra símbolos que aparecem no contexto do uso de parâmetros de tipos genéricos.

Tabela B-4: Genéricos

SímboloExplicação
path<...>Especifica parâmetros para um tipo genérico em um tipo (por exemplo, Vec<u8>)
path::<...>, method::<...>Especifica parâmetros para um tipo, função ou método genérico em uma expressão; isso é frequentemente chamado de turbofish (por exemplo, "42".parse::<i32>())
fn ident<...> ...Define uma função genérica
struct ident<...> ...Define uma struct genérica
enum ident<...> ...Define um enum genérico
impl<...> ...Define uma implementação genérica
for<...> typeLimites de lifetime de ordem superior
type<ident=type>Um tipo genérico em que um ou mais tipos associados têm atribuições específicas (por exemplo, Iterator<Item=T>)

A Tabela B-5 mostra símbolos que aparecem no contexto de restringir parâmetros de tipos genéricos com limites de trait.

Tabela B-5: Restrições de limites de trait

SímboloExplicação
T: UParâmetro genérico T restrito a tipos que implementam U
T: 'aO tipo genérico T precisa sobreviver ao lifetime 'a (isto é, o tipo não pode conter, de forma transitiva, referências com lifetimes menores que 'a)
T: 'staticO tipo genérico T não contém referências emprestadas além de referências 'static
'b: 'aO lifetime genérico 'b precisa sobreviver ao lifetime 'a
T: ?SizedPermite que o parâmetro de tipo genérico seja um tipo de tamanho dinâmico
'a + trait, trait + traitRestrição composta de tipo

A Tabela B-6 mostra símbolos que aparecem no contexto de chamar ou definir macros e de especificar atributos em um item.

Tabela B-6: Macros e atributos

SímboloExplicação
#[meta]Atributo externo
#![meta]Atributo interno
$identSubstituição de macro
$ident:kindMetavariável de macro
$(...)...Repetição de macro
ident!(...), ident!{...}, ident![...]Invocação de macro

A Tabela B-7 mostra símbolos que criam comentários.

Tabela B-7: Comentários

SímboloExplicação
//Comentário de linha
//!Comentário interno de documentação em linha
///Comentário externo de documentação em linha
/*...*/Comentário de bloco
/*!...*/Comentário interno de documentação em bloco
/**...*/Comentário externo de documentação em bloco

A Tabela B-8 mostra os contextos em que parênteses são usados.

Tabela B-8: Parênteses

SímboloExplicação
()Tupla vazia (também chamada de unit), tanto como literal quanto como tipo
(expr)Expressão entre parênteses
(expr,)Expressão de tupla de um único elemento
(type,)Tipo de tupla de um único elemento
(expr, ...)Expressão de tupla
(type, ...)Tipo de tupla
expr(expr, ...)Expressão de chamada de função; também usada para inicializar structs de tupla e variantes de enum em forma de tupla

A Tabela B-9 mostra os contextos em que chaves são usadas.

Tabela B-9: Chaves

ContextoExplicação
{...}Expressão de bloco
Type {...}Literal de struct

A Tabela B-10 mostra os contextos em que colchetes são usados.

Tabela B-10: Colchetes

ContextoExplicação
[...]Literal de array
[expr; len]Literal de array contendo len cópias de expr
[type; len]Tipo de array contendo len instâncias de type
expr[expr]Indexação de coleção; sobrecarregável (Index, IndexMut)
expr[..], expr[a..], expr[..b], expr[a..b]Indexação de coleção simulando fatiamento, usando Range, RangeFrom, RangeTo ou RangeFull como “índice”