Annexe B : les opérateurs et les symboles
Cette annexe contient un glossaire de la syntaxe de Rust, qui comprend les opérateurs et d’autres symboles qui apparaissent seuls ou dans le contexte de chemins, de génériques, de limites de traits, de macros, d’attributs, de commentaires, de tuples et de crochets.
Les opérateurs
Le tableau B-1 contient les opérateurs de Rust, un exemple montrant comment l’opérateur pourrait apparaître en contexte, une courte explication, et si cet opérateur est surchargeable. Si un opérateur est surchargeable, le trait correspondant à utiliser pour le surcharger est indiqué.
Tableau B-1 : les opérateurs
| Opérateur | Exemple | Explication | Surchargeable ? |
|---|---|---|---|
! | ident!(...), ident!{...}, ident![...] | Expansion de macro | |
! | !expr | Complément binaire ou logique | Not |
!= | expr != expr | Comparaison de non-égalité | PartialEq |
% | expr % expr | Reste arithmétique | Rem |
%= | var %= expr | Reste arithmétique et assignation | RemAssign |
& | &expr, &mut expr | Emprunt | |
& | &type, &mut type, &'a type, &'a mut type | Type de pointeur emprunté | |
& | expr & expr | ET binaire | BitAnd |
&= | var &= expr | ET binaire et assignation | BitAndAssign |
&& | expr && expr | ET logique avec court-circuit | |
* | expr * expr | Multiplication arithmétique | Mul |
*= | var *= expr | Multiplication arithmétique et assignation | MulAssign |
* | *expr | Déréférencement | Deref |
* | *const type, *mut type | Pointeur brut | |
+ | trait + trait, 'a + trait | Contrainte de type composée | |
+ | expr + expr | Addition arithmétique | Add |
+= | var += expr | Addition arithmétique et assignation | AddAssign |
, | expr, expr | Séparateur d’arguments et d’éléments | |
- | - expr | Négation arithmétique | Neg |
- | expr - expr | Soustraction arithmétique | Sub |
-= | var -= expr | Soustraction arithmétique et assignation | SubAssign |
-> | fn(...) -> type, |…| -> type | Type de retour d’une fonction ou d’une fermeture | |
. | expr.ident | Accès à un champ | |
. | expr.ident(expr, ...) | Appel de méthode | |
. | expr.0, expr.1, et ainsi de suite | Indexation de tuple | |
.. | .., expr.., ..expr, expr..expr | Littéral d’intervalle exclusif à droite | PartialOrd |
..= | ..=expr, expr..=expr | Littéral d’intervalle inclusif à droite | PartialOrd |
.. | ..expr | Syntaxe de mise à jour de littéral de structure | |
.. | variant(x, ..), struct_type { x, .. } | Motif “et le reste” | |
... | expr...expr | (Déprécié, utilisez ..= à la place) Dans un motif : motif d’intervalle inclusif | |
/ | expr / expr | Division arithmétique | Div |
/= | var /= expr | Division arithmétique et assignation | DivAssign |
: | pat: type, ident: type | Contraintes | |
: | ident: expr | Initialiseur de champ de structure | |
: | 'a: loop {...} | Étiquette de boucle | |
; | expr; | Fin d’instruction et d’élément | |
; | [...; len] | Partie de la syntaxe de tableau à taille fixe | |
<< | expr << expr | Décalage à gauche | Shl |
<<= | var <<= expr | Décalage à gauche et assignation | ShlAssign |
< | expr < expr | Comparaison inférieur à | PartialOrd |
<= | expr <= expr | Comparaison inférieur ou égal à | PartialOrd |
= | var = expr, ident = type | Assignation/équivalence | |
== | expr == expr | Comparaison d’égalité | PartialEq |
=> | pat => expr | Partie de la syntaxe d’une branche de match | |
> | expr > expr | Comparaison supérieur à | PartialOrd |
>= | expr >= expr | Comparaison supérieur ou égal à | PartialOrd |
>> | expr >> expr | Décalage à droite | Shr |
>>= | var >>= expr | Décalage à droite et assignation | ShrAssign |
@ | ident @ pat | Liaison de motif | |
^ | expr ^ expr | Ou exclusif binaire | BitXor |
^= | var ^= expr | Ou exclusif binaire et assignation | BitXorAssign |
| | pat | pat | Alternatives de motif | |
| | expr | expr | Ou binaire | BitOr |
|= | var |= expr | Ou binaire et assignation | BitOrAssign |
|| | expr || expr | Ou logique avec court-circuit | |
? | expr? | Propagation d’erreur |
Les symboles non-opérateurs
Les tableaux suivants contiennent tous les symboles qui ne fonctionnent pas comme des opérateurs ; c’est-à-dire qu’ils ne se comportent pas comme un appel de fonction ou de méthode.
Le tableau B-2 montre les symboles qui apparaissent seuls et sont valides à divers emplacements.
Tableau B-2 : syntaxe autonome
| Symbole | Explication |
|---|---|
'ident | Durée de vie nommée ou étiquette de boucle |
Chiffres immédiatement suivis de u8, i32, f64, usize, etc. | Littéral numérique d’un type spécifique |
"..." | Littéral de chaîne de caractères |
r"...", r#"..."#, r##"..."##, et ainsi de suite | Littéral de chaîne brute ; les caractères d’échappement ne sont pas traités |
b"..." | Littéral de chaîne d’octets ; construit un tableau d’octets plutôt qu’une chaîne |
br"...", br#"..."#, br##"..."##, et ainsi de suite | Littéral de chaîne d’octets brute ; combinaison de chaîne brute et d’octets |
'...' | Littéral de caractère |
b'...' | Littéral d’octet ASCII |
|…| expr | Fermeture |
! | Type bas (bottom) toujours vide pour les fonctions divergentes |
_ | Motif “ignoré” ; utilisé aussi pour rendre les littéraux entiers lisibles |
Le tableau B-3 montre les symboles qui apparaissent dans le contexte d’un chemin à travers la hiérarchie de modules vers un élément.
Tableau B-3 : syntaxe relative aux chemins
| Symbole | Explication |
|---|---|
ident::ident | Chemin d’espace de noms |
::path | Chemin relatif à la racine de la crate (c’est-à-dire un chemin explicitement absolu) |
self::path | Chemin relatif au module courant (c’est-à-dire un chemin explicitement relatif) |
super::path | Chemin relatif au module parent du module courant |
type::ident, <type as trait>::ident | Constantes, fonctions et types associés |
<type>::... | Élément associé pour un type qui ne peut pas être directement nommé (par exemple, <&T>::..., <[T]>::..., etc.) |
trait::method(...) | Désambiguïsation d’un appel de méthode en nommant le trait qui la définit |
type::method(...) | Désambiguïsation d’un appel de méthode en nommant le type pour lequel elle est définie |
<type as trait>::method(...) | Désambiguïsation d’un appel de méthode en nommant le trait et le type |
Le tableau B-4 montre les symboles qui apparaissent dans le contexte de l’utilisation de paramètres de types génériques.
Tableau B-4 : les génériques
| Symbole | Explication |
|---|---|
path<...> | Renseigne les paramètres d’un type générique dans un type (par exemple, Vec<u8>) |
path::<...>, method::<...> | Renseigne les paramètres d’un type, d’une fonction ou d’une méthode générique dans une expression ; souvent appelé turbofish (par exemple, "42".parse::<i32>()) |
fn ident<...> ... | Définit une fonction générique |
struct ident<...> ... | Définit une structure générique |
enum ident<...> ... | Définit une énumération générique |
impl<...> ... | Définit une implémentation générique |
for<...> type | Limites de durée de vie de rang supérieur |
type<ident=type> | Un type générique où un où plusieurs types associés ont des assignations spécifiques (par exemple, Iterator<Item=T>) |
Le tableau B-5 montre les symboles qui apparaissent dans le contexte de la contrainte de paramètres de types génériques avec des limites de traits.
Tableau B-5 : les contraintes de limites de traits
| Symbole | Explication |
|---|---|
T: U | Le paramètre générique T est contraint aux types qui implémentent U |
T: 'a | Le type générique T doit vivre au moins aussi longtemps que la durée de vie 'a (le type ne peut pas contenir transitivement de références avec des durées de vie plus courtes que 'a) |
T: 'static | Le type générique T ne contient pas d’autres références empruntées que des références 'static |
'b: 'a | La durée de vie générique 'b doit vivre au moins aussi longtemps que la durée de vie 'a |
T: ?Sized | Autorise le paramètre de type générique à être un type à taille dynamique |
'a + trait, trait + trait | Contrainte de type composée |
Le tableau B-6 montre les symboles qui apparaissent dans le contexte de l’appel ou de la définition de macros et de la spécification d’attributs sur un élément.
Tableau B-6 : les macros et les attributs
| Symbole | Explication |
|---|---|
#[meta] | Attribut externe |
#![meta] | Attribut interne |
$ident | Substitution de macro |
$ident:kind | Métavariable de macro |
$(...)... | Répétition de macro |
ident!(...), ident!{...}, ident![...] | Invocation de macro |
Le tableau B-7 montre les symboles qui créent des commentaires.
Tableau B-7 : les commentaires
| Symbole | Explication |
|---|---|
// | Commentaire de ligne |
//! | Commentaire de documentation interne |
/// | Commentaire de documentation externe |
/*...*/ | Commentaire de bloc |
/*!...*/ | Commentaire de documentation interne de bloc |
/**...*/ | Commentaire de documentation externe de bloc |
Le tableau B-8 montre les contextes dans lesquels les parenthèses sont utilisées.
Tableau B-8 : les parenthèses
| Symbole | Explication |
|---|---|
() | Tuple vide (aussi appelé unit), aussi bien en littéral qu’en type |
(expr) | Expression entre parenthèses |
(expr,) | Expression de tuple à un seul élément |
(type,) | Type de tuple à un seul élément |
(expr, ...) | Expression de tuple |
(type, ...) | Type de tuple |
expr(expr, ...) | Appel de fonction ; utilisé aussi pour initialiser les struct tuples et les variantes d’enum tuples |
Le tableau B-9 montre les contextes dans lesquels les accolades sont utilisées.
Tableau B-9 : les accolades
| Contexte | Explication |
|---|---|
{...} | Expression de bloc |
Type {...} | Littéral de structure |
Le tableau B-10 montre les contextes dans lesquels les crochets sont utilisés.
Tableau B-10 : les crochets
| Contexte | Explication |
|---|---|
[...] | Littéral de tableau |
[expr; len] | Littéral de tableau contenant len copies de expr |
[type; len] | Type de tableau contenant len instances de type |
expr[expr] | Indexation de collection ; surchargeable (Index, IndexMut) |
expr[..], expr[a..], expr[..b], expr[a..b] | Indexation de collection simulant un découpage de collection, en utilisant Range, RangeFrom, RangeTo ou RangeFull comme “index” |