付録B: 演算子と記号
この付録には、Rust の構文の用語集として、演算子やその他の記号を収録しています。これらの記号は、単独で現れる場合もあれば、パス、ジェネリクス、トレイト境界、マクロ、属性、コメント、タプル、括弧の文脈で現れる場合もあります。
演算子
表B-1には、Rust における演算子、その演算子が文脈の中でどのように現れるかの例、簡単な説明、その演算子がオーバーロード可能かどうかが示されています。演算子がオーバーロード可能な場合は、その演算子をオーバーロードするために使用する対応するトレイトも記載されています。
表B-1: 演算子
| 演算子 | 例 | 説明 | オーバーロード可能? |
|---|---|---|---|
! | ident!(...), ident!{...}, ident![...] | マクロ展開 | |
! | !expr | ビット単位または論理補数 | Not |
!= | expr != expr | 不等比較 | PartialEq |
% | expr % expr | 算術剰余 | Rem |
%= | var %= expr | 算術剰余と代入 | RemAssign |
& | &expr, &mut expr | 借用 | |
& | &type, &mut type, &'a type, &'a mut type | 借用ポインタ型 | |
& | expr & expr | ビット単位 AND | BitAnd |
&= | var &= expr | ビット単位 AND と代入 | BitAndAssign |
&& | expr && expr | 短絡論理 AND | |
* | expr * expr | 算術乗算 | Mul |
*= | var *= expr | 算術乗算と代入 | MulAssign |
* | *expr | 逆参照 | Deref |
* | *const type, *mut type | 生ポインタ | |
+ | trait + trait, 'a + trait | 複合型制約 | |
+ | expr + expr | 算術加算 | Add |
+= | var += expr | 算術加算と代入 | AddAssign |
, | expr, expr | 引数および要素の区切り | |
- | - expr | 算術否定 | Neg |
- | expr - expr | 算術減算 | Sub |
-= | var -= expr | 算術減算と代入 | SubAssign |
-> | fn(...) -> type, |…| -> type | 関数およびクロージャの戻り値型 | |
. | expr.ident | フィールドアクセス | |
. | expr.ident(expr, ...) | メソッド呼び出し | |
. | expr.0, expr.1, and so on | タプルのインデックス指定 | |
.. | .., expr.., ..expr, expr..expr | 右端を含まない範囲リテラル | PartialOrd |
..= | ..=expr, expr..=expr | 右端を含む範囲リテラル | PartialOrd |
.. | ..expr | 構造体リテラル更新構文 | |
.. | variant(x, ..), struct_type { x, .. } | 「残りすべて」パターン束縛 | |
... | expr...expr | (非推奨。代わりに ..= を使用)パターン内: 包含範囲パターン | |
/ | expr / expr | 算術除算 | Div |
/= | var /= expr | 算術除算と代入 | DivAssign |
: | pat: type, ident: type | 制約 | |
: | ident: expr | 構造体フィールド初期化子 | |
: | 'a: loop {...} | ループラベル | |
; | expr; | 文およびアイテムの終端 | |
; | [...; len] | 固定長配列構文の一部 | |
<< | expr << expr | 左シフト | Shl |
<<= | var <<= expr | 左シフトと代入 | ShlAssign |
< | expr < expr | より小さいかの比較 | PartialOrd |
<= | expr <= expr | 以下比較 | PartialOrd |
= | var = expr, ident = type | 代入/等価 | |
== | expr == expr | 等価比較 | PartialEq |
=> | pat => expr | match アーム構文の一部 | |
> | expr > expr | より大きいかの比較 | PartialOrd |
>= | expr >= expr | 以上比較 | PartialOrd |
>> | expr >> expr | 右シフト | Shr |
>>= | var >>= expr | 右シフトと代入 | ShrAssign |
@ | ident @ pat | パターン束縛 | |
^ | expr ^ expr | ビット単位排他的 OR | BitXor |
^= | var ^= expr | ビット単位排他的 OR と代入 | BitXorAssign |
| | pat | pat | パターンの代替 | |
| | expr | expr | ビット単位 OR | BitOr |
|= | var |= expr | ビット単位 OR と代入 | BitOrAssign |
|| | expr || expr | 短絡論理 OR | |
? | expr? | エラー伝播 |
演算子ではない記号
以下の表には、演算子として機能しないすべての記号、つまり関数呼び出しやメソッド呼び出しのように振る舞わない記号が含まれています。
表B-2は、単独で現れ、さまざまな場所で有効な記号を示しています。
表B-2: 単独で現れる構文
| 記号 | 説明 |
|---|---|
'ident | 名前付きライフタイムまたはループラベル |
直後に u8、i32、f64、usize などが続く数字 | 特定の型の数値リテラル |
"..." | 文字列リテラル |
r"...", r#"..."#, r##"..."## など | 生文字列リテラル。エスケープ文字は処理されない |
b"..." | バイト文字列リテラル。文字列ではなくバイト配列を構築する |
br"...", br#"..."#, br##"..."## など | 生バイト文字列リテラル。生文字列リテラルとバイト文字列リテラルの組み合わせ |
'...' | 文字リテラル |
b'...' | ASCIIバイトリテラル |
|…| expr | クロージャ |
! | 発散する関数のための、常に空のボトム型 |
_ | 「無視される」パターン束縛。整数リテラルを読みやすくするためにも使われる |
表B-3は、モジュール階層を通ってアイテムに至るパスの文脈で現れる記号を示しています。
表B-3: パス関連の構文
| 記号 | 説明 |
|---|---|
ident::ident | 名前空間パス |
::path | クレートルートを基準とするパス(つまり、明示的な絶対パス) |
self::path | 現在のモジュールを基準とするパス(つまり、明示的な相対パス) |
super::path | 現在のモジュールの親を基準とするパス |
type::ident, <type as trait>::ident | 関連定数、関連関数、関連型 |
<type>::... | 直接名前を付けられない型の関連アイテム(例: <&T>::...、<[T]>::... など) |
trait::method(...) | それを定義するトレイトを指定してメソッド呼び出しの曖昧さを解消する |
type::method(...) | それが定義されている型を指定してメソッド呼び出しの曖昧さを解消する |
<type as trait>::method(...) | トレイトと型を指定してメソッド呼び出しの曖昧さを解消する |
表B-4は、ジェネリック型パラメータを使用する文脈で現れる記号を示しています。
表B-4: ジェネリクス
| 記号 | 説明 |
|---|---|
path<...> | 型の中でジェネリック型へのパラメータを指定する(例: Vec<u8>) |
path::<...>, method::<...> | 式の中でジェネリック型、関数、またはメソッドへのパラメータを指定する。しばしば turbofish と呼ばれる(例: "42".parse::<i32>()) |
fn ident<...> ... | ジェネリック関数を定義する |
struct ident<...> ... | ジェネリック構造体を定義する |
enum ident<...> ... | ジェネリック列挙型を定義する |
impl<...> ... | ジェネリック実装を定義する |
for<...> type | 高階ライフタイム境界 |
type<ident=type> | 1つ以上の関連型に特定の割り当てがあるジェネリック型(例: Iterator<Item=T>) |
表B-5は、トレイト境界によってジェネリック型パラメータを制約する文脈で現れる記号を示しています。
表B-5: トレイト境界の制約
| 記号 | 説明 |
|---|---|
T: U | U を実装する型に制約されたジェネリックパラメータ T |
T: 'a | ジェネリック型 T はライフタイム 'a より長く存続しなければならない(つまり、その型は推移的に 'a より短いライフタイムを持つ参照を含んではならない) |
T: 'static | ジェネリック型 T は 'static 以外の借用参照を含まない |
'b: 'a | ジェネリックライフタイム 'b はライフタイム 'a より長く存続しなければならない |
T: ?Sized | ジェネリック型パラメータが動的サイズ型であることを許可する |
'a + trait, trait + trait | 複合型制約 |
表B-6は、マクロの呼び出しまたは定義の文脈、および アイテムに属性を指定する文脈で現れる記号を示しています。
表B-6: マクロと属性
| 記号 | 説明 |
|---|---|
#[meta] | 外側属性 |
#![meta] | 内側属性 |
$ident | マクロ置換 |
$ident:kind | マクロメタ変数 |
$(...)... | マクロ繰り返し |
ident!(...), ident!{...}, ident![...] | マクロ呼び出し |
表B-7は、コメントを作成する記号を示しています。
表B-7: コメント
| 記号 | 説明 |
|---|---|
// | 行コメント |
//! | 内側の行ドキュメントコメント |
/// | 外側の行ドキュメントコメント |
/*...*/ | ブロックコメント |
/*!...*/ | 内側のブロックドキュメントコメント |
/**...*/ | 外側のブロックドキュメントコメント |
表B-8は、丸かっこが使用される文脈を示しています。
表B-8: 丸かっこ
| 記号 | 説明 |
|---|---|
() | 空のタプル(別名ユニット)。リテラルと型の両方 |
(expr) | 丸かっこで囲まれた式 |
(expr,) | 単一要素のタプル式 |
(type,) | 単一要素のタプル型 |
(expr, ...) | タプル式 |
(type, ...) | タプル型 |
expr(expr, ...) | 関数呼び出し式。タプル struct およびタプル enum バリアントの初期化にも使用される |
表B-9は、波かっこが使用される文脈を示しています。
表B-9: 波かっこ
| コンテキスト | 説明 |
|---|---|
{...} | ブロック式 |
Type {...} | 構造体リテラル |
表B-10は、角かっこが使用される文脈を示しています。
表B-10: 角かっこ
| コンテキスト | 説明 |
|---|---|
[...] | 配列リテラル |
[expr; len] | expr のコピーを len 個含む配列リテラル |
[type; len] | type の要素を len 個含む配列型 |
expr[expr] | コレクションの添字アクセス。オーバーロード可能(Index, IndexMut) |
expr[..], expr[a..], expr[..b], expr[a..b] | コレクションのスライスのように見えるコレクション添字アクセスで、「インデックス」として Range、RangeFrom、RangeTo、または RangeFull を使用する |