命名規則
命名規則とは、プログラム内で使用される名前(変数名や関数名など)に一貫性を持たせるためのルールです。これにより、コードの可読性や保守性が向上し、他の開発者がコードを理解しやすくなります。
命名規則は、プログラミング言語ごとに異なることがありますが、多くの言語で一般的に使用される命名規則には、スネークケース(snake_case)、キャメルケース(UpperCamelCase または lowerCamelCase)、ケバブケース(kebab-case)などがあります。
-
スネークケース (snake_case)
単語の間にアンダースコア (_) を入れる形式。例:example_variable
全て大文字の場合は特に SCREAMING_SNAKE_CASE と呼ばれる。 -
キャメルケース (CamelCase)
単語の先頭を大文字にする形式- UpperCamelCase (PascalCase)
最初の単語の先頭文字は小文字。例:ExampleVariable - lowerCamelCase
最初の単語の先頭文字は大文字。例:exampleVariable
- UpperCamelCase (PascalCase)
-
ケバブケース (kebab-case)
単語の間にハイフン (-) を入れる形式。例:example-variable
Rust の命名規則
Rust では、スネークケースとアッパーキャメルケースを採用しています。
Rust の命名規則は RFC 430 にまとめられています。
| アイテム | 命名規則 |
|---|---|
| クレート |
snake_case (ただし、単一の単語を優先する) |
| モジュール | snake_case |
| 型 | UpperCamelCase |
| トレイト | UpperCamelCase |
| 列挙型のバリアント | UpperCamelCase |
| 関数 | snake_case |
| メソッド | snake_case |
| 一般的なコンストラクタ |
new もしくは with_more_details
|
| 変換コンストラクタ | from_some_other_type |
| ローカル変数 | snake_case |
| 静的変数 | SCREAMING_SNAKE_CASE |
| 定数 | SCREAMING_SNAKE_CASE |
| 型パラメータ | 簡潔に UpperCamelCase, 通常は大文字 1 文字: T
|
| ライフタイム | 短く、小文字: 'a
|
頭字語の扱い
UpperCamelCase では、頭字語(USA や IT など)は 1 つの単語としてカウントされます。UUID ではなく Uuid とします。 Snake_case では、頭字語は小文字になります。is_XID_start ではなく is_xid_start とします。
数字の扱い
UpperCamelCase の名前では、わかりやすくするために複数の数字を _ で区切ることができます (Windows101709 ではなく Windows10_1709)。
単一文字の扱い
Snake_case または SCREAMING_SNAKE_CASE では、最後の「単語」でない限り、「単語」は単一の文字で構成されてはなりません。 したがって、b_tree_map ではなく btree_map が使用されますが、PI2 ではなく PI_2 が使用されます。
具体例
型名
Vec (ベクター型)、HashMap (ハッシュマップ型)
// 型名は UpperCamelCase
struct MyStruct {
field: i32,
}
トレイト名
// トレイト名はUpperCamelCase
trait MyTrait {
fn do_something(&self);
}
列挙型のバリアント
// 列挙型のバリアントは UpperCamelCase
enum MyEnum {
VariantOne,
VariantTwo,
}
関数名
// 関数名は snake_case
fn my_function() {
// 函数の内容
}
メソッド名
impl MyStruct {
// メソッド名は snake_case
fn my_method(&self) {
// メソッドの内容
}
}
一般的なコンストラクタ
impl MyStruct {
// 一般的なコンストラクタ
fn new() -> Self {
Self { field: 0 }
}
fn with_more_details(field: i32) -> Self {
Self { field }
}
}
変換コンストラクタ
impl From<OtherType> for MyStruct {
// 変換コンストラクタは from_some_other_type
fn from(other: OtherType) -> Self {
Self { field: other.field }
}
}
ローカル変数
fn main() {
// ローカル変数は snake_case
let my_variable = 10;
}
静的変数と定数
// 静的変数と定数は SCREAMING_SNAKE_CASE
static MAX_VALUE: i32 = 100;
const PI: f64 = 3.141592653589793;
型パラメータ
// 型パラメータは UpperCamelCase、通常は大文字 1 文字
fn generic_function<T>(value: T) {
// 関数の内容
}
ライフタイム
// ライフタイムは短く、小文字
fn lifetime_example<'a>(value: &'a str) {
// 関数の内容
}
おわりに
これらの命名規則に従うことで、Rustのコードは一貫性があり、読みやすく、理解しやすくなります。命名規則は、チーム開発や長期的なプロジェクトにおいて特に重要です。