Prompt

Rustがsnake_caseを推奨していることに、何か理由はある?

お、いいところに気づいたね!プログラミング言語ごとのネーミング規則(命名規則)って、単なる好みの問題に見えて、実はその言語の設計思想読みやすさの哲学が深く関わっているんだ。

Rustが変数や関数名に snake_case(スネークケース)を、型名に PascalCase(パスカルケース)を推奨している(というか、コンパイラが警告してくる!)のには、情報工学的な視点からも面白い理由がいくつかあるよ!🚀


1. 視認性と可読性(タイポグラフィ的視点)

一番大きな理由は、**「単語の区切りがはっきりすること」**だよ。

  • snake_case: this_is_a_long_variable_name

  • camelCase: thisIsALongVariableName

学術的な研究(視覚心理学など)によると、アンダースコアで区切られたスネークケースの方が、キャメルケースよりも脳が単語を認識するスピードが速いという結果が出ているんだ。Rustは「コードは書く時間より読む時間の方が長い」という考えを重視しているから、読みやすさを最優先しているんだね。


2. 「型」と「値」の明確な区別

Rustでは、「型」と「実体(関数や変数)」を視覚的に一瞬で判別できるようにしているんだ。

  • PascalCase: struct UserProfile, enum NetworkStatus(抽象的な概念・設計図)

  • snake_case: let user_profile = ..., fn get_status()(具体的なデータ・操作)

Rustは非常に厳格な静的型付け言語だよね。コードをパッと見たときに、それが「型」の話をしているのか「動いている値」の話をしているのかが直感的にわかることは、デバッグやコードリークにおいて大きな助けになるんだ。


3. C/C++ エコシステムとの親和性

Rustは「C++の代替(システムプログラミング言語)」として誕生した経緯があるよね。

  • C言語の標準ライブラリ: printf, malloc, size_t

  • C++の標準ライブラリ (STL): std::vector, std::unique_ptr

これら伝統的なシステム言語は、伝統的にスネークケースを多用してきたんだ。低レイヤーに近い部分を扱うRustにとって、既存のCライブラリとリンクしたり、C++プログラマが移行してきたりする際に、違和感のない見た目であることも重要だったんだよ。


💡 豆知識:Rustコンパイラは「口うるさい」

Rustの面白いところは、これを単なる「推奨」に留めず、コンパイラ(rustc)が標準でチェックしていることだね。

もし let myVariable = 10; と書くと、コンパイラは**「警告 (warning: variable myVariable should have a snake case name)」**を出してくるんだ。

なぜエラーじゃなくて警告なの?

外部のライブラリ(例えばWindows APIなど)がキャメルケースを使っている場合、それをラップするコードでどうしても使わなきゃいけない時があるからなんだ。その時は #[allow(non_snake_case)] というアトリビュートをつけて、「分かっててやってるから黙ってて!」とコンパイラに伝えることができるよ。


専門学生の君へのツッコミ

JavaやC#はキャメルケースが主流、CやPythonやRustはスネークケースが主流……というふうに、言語の「家系図」によって文化が分かれているのが面白いよね!

君が一番経験のあるJavaやC#から来ると、最初は少し「指が慣れない」かもしれないけど、慣れてくると「アンダースコアがないと落ち着かない身体」になっちゃうかも!?

次は、Rustの**「マクロ名」「定数名」**の規則についても気になるかな?それとも、さっきのGitの話の続きをする?😊✨