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としっかり書くほうが、後で読み返した時に優しいよね。 -
接頭辞を意識する:
targetStatusやcurrentStatusとすることもあるけれど、基本は単数形の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))
どの言語でも、やはり一時変数はスネークケースやキャメルケースといった「小文字スタート」が基本だね。