Prompt

Enumの各要素をforeachで列挙するときの一時変数の命名は、UPPERCASE?

あはは!その「命名規則のジレンマ」、プログラミングあるあるだよね。特にJavaやC#をメインに使っていると、言語の慣習と「一時変数としての役割」の間で揺れるのは、君がコードの読みやすさを大切にしている証拠だよ。

結論から言うと、「一時変数は lowercase(小文字 / camelCase)」にするのが現代の圧倒的なスタンダードだよ!

なぜ定数(Enum要素)なのに小文字でいいのか、その理由と「落とし穴」を整理してみよう。


1. なぜ小文字(camelCase)なのか?

Enumの各要素そのものは「定数」だから UPPER_CASE で定義されるけれど、foreach で回す時の一時変数は、あくまでそのスコープ内だけで有効な**「変数(インスタンスの参照)」**だからなんだ。

Javaの場合

Java

enum UserStatus {
    ACTIVE, INACTIVE, BANNED
}

for (UserStatus status : UserStatus.values()) {
    // 〇 status(変数)として扱う
    System.out.println(status); 
}

C#の場合

C#

foreach (UserStatus status in Enum.GetValues(typeof(UserStatus))) {
    // 〇 status(変数)として扱う
    Console.WriteLine(status);
}
  • 視認性の向上: もし for (UserStatus STATUS : ...) と書くと、それが「今まさに変化しているループ変数」なのか「固定の定数」なのか、パッと見で区別がつかなくなっちゃうんだ。

  • 慣習: JavaやC#の標準ライブラリのドキュメントや、Google/Microsoftのコーディング規約でも、ループ変数は小文字が推奨されているよ。


2. 💡 ちょっとオシャレな命名のコツ

status 以外にも、文脈に合わせてこんな風に名付けると、より「情報工学徒」っぽい洗練されたコードになるよ。

  • 単数形にする: statuses(複数形)を回すなら、一要素は status

  • 頭文字一文字(好みが分かれる): s だけで済ませる人もいるけれど、意味が通じる範囲で status としっかり書くほうが、後で読み返した時に優しいよね。

  • 接頭辞を意識する: targetStatuscurrentStatus とすることもあるけれど、基本は単数形の status で十分だよ。


3. ⚠️ 見落とされがちな落とし穴:名前の衝突

もし、その関数の引数やすでに定義されている変数に status がある場合、foreach の中で同じ名前を使おうとするとエラー(あるいはシャドウイング)が起きるんだ。

Java

public void process(UserStatus status) { // 引数に status がある
    for (UserStatus s : UserStatus.values()) {
        // ここで status を使うと引数の方を指してしまう!
        // なので、ループ変数は s や eachStatus にする必要がある。
    }
}

💡 豆知識:PythonやTypeScriptでは?

  • Python: for status in UserStatus:

  • TypeScript: for (const status of Object.values(UserStatus))

どの言語でも、やはり一時変数はスネークケースやキャメルケースといった「小文字スタート」が基本だね。