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

付録A: キーワード

以下の一覧には、Rust言語において現在または将来の使用のために予約されて いるキーワードが含まれています。そのため、これらは識別子として使用できません(ただし、 「生の 識別子」 の節で説明するように、生の識別子として使用する場合を除きます)。識別子 とは、 関数、変数、パラメータ、struct フィールド、モジュール、クレート、定数、 マクロ、static 値、属性、型、トレイト、またはライフタイムの名前です。

現在使用されているキーワード

以下は、現在使用されているキーワードと、その機能の説明の一覧です。

  • as: プリミティブ型へのキャストを行い、項目を含む特定のトレイトを 明確化し、または use 文で項目の名前を変更する。
  • async: 現在のスレッドをブロックする代わりに Future を返す。
  • await: Future の結果が準備できるまで実行を一時停止する。
  • break: ループを即座に抜ける。
  • const: 定数アイテムまたは定数生ポインタを定義する。
  • continue: 次のループ反復に進む。
  • crate: モジュールパスにおいて、クレートルートを指す。
  • dyn: トレイトオブジェクトへの動的ディスパッチ。
  • else: if および if let の制御フロー構文におけるフォールバック。
  • enum: 列挙型を定義する。
  • extern: 外部関数または外部変数をリンクする。
  • false: ブール値の偽リテラル。
  • fn: 関数または関数ポインタ型を定義する。
  • for: イテレータから項目を反復処理し、トレイトを実装し、または 高ランクのライフタイムを指定する。
  • if: 条件式の結果に基づいて分岐する。
  • impl: 固有の機能またはトレイトの機能を実装する。
  • in: for ループ構文の一部。
  • let: 変数を束縛する。
  • loop: 無条件にループする。
  • match: 値をパターンに照合する。
  • mod: モジュールを定義する。
  • move: クロージャがキャプチャしたすべての値の所有権を取るようにする。
  • mut: 参照、生ポインタ、またはパターン束縛における可変性を示す。
  • pub: struct フィールド、impl ブロック、または モジュールにおける公開可視性を示す。
  • ref: 参照によって束縛する。
  • return: 関数から戻る。
  • Self: 定義または実装している型を表す型エイリアス。
  • self: メソッドの対象、または現在のモジュール。
  • static: プログラムの実行全体にわたって存続するグローバル変数または ライフタイム。
  • struct: 構造体を定義する。
  • super: 現在のモジュールの親モジュール。
  • trait: トレイトを定義する。
  • true: ブール値の真リテラル。
  • type: 型エイリアスまたは関連型を定義する。
  • union: 共用体 を定義する。union 宣言で使用される場合にのみキーワードである。
  • unsafe: unsafe なコード、関数、トレイト、または実装を示す。
  • use: シンボルをスコープに導入する。
  • where: 型を制約する句を示す。
  • while: 式の結果に基づいて条件付きでループする。

将来の使用のために予約されているキーワード

以下のキーワードにはまだ何の機能もありませんが、将来使用される可能性に備えて Rust によって予約されています。

  • abstract
  • become
  • box
  • do
  • final
  • gen
  • macro
  • override
  • priv
  • try
  • typeof
  • unsized
  • virtual
  • yield

生の識別子

生の識別子 とは、通常であれば使えない場所でキーワードを使えるようにする構文です。 生の識別子は、キーワードの先頭に r# を付けて使用します。

たとえば、match はキーワードです。match を名前として使う次の関数を コンパイルしようとすると:

ファイル名: src/main.rs

fn match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}

次のエラーが表示されます:

error: expected identifier, found keyword `match`
 --> src/main.rs:4:4
  |
4 | fn match(needle: &str, haystack: &str) -> bool {
  |    ^^^^^ expected identifier, found keyword

このエラーが示しているとおり、キーワード match は関数の識別子として 使用できません。match を関数名として使うには、次のように生の 識別子構文を使う必要があります:

ファイル名: src/main.rs

fn r#match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}

fn main() {
    assert!(r#match("foo", "foobar"));
}

このコードはエラーなしでコンパイルできます。関数の定義時の名前だけでなく、 main でその関数を呼び出している箇所でも、関数名に r# プレフィックスが 付いていることに注目してください。

生の識別子を使うと、たまたまその語が予約キーワードであっても、好きな語を 識別子として使うことができます。これにより、識別子名を選ぶ自由度が増すだけでなく、 こうした語がキーワードではない言語で書かれたプログラムと連携することもできます。 さらに、生の識別子を使うと、あなたのクレートが使っているものとは異なる Rust エディションで書かれたライブラリを使うこともできます。たとえば、try は 2015 edition ではキーワードではありませんが、2018、2021、 および 2024 editions ではキーワードです。2015 edition を使って書かれ、try 関数を持つライブラリに依存している場合、 後の editions でその関数を自分のコードから呼び出すには、この場合は r#try である 生の識別子構文を使う必要があります。エディションの詳細については、 付録E を参照してください。