識別子と予約語のコードトレース

識別子は変数・クラス・メソッドなどへ付ける名前です。使える文字、予約語との区別、大文字小文字、名前を使える範囲を理解すると、コードを実行する前に見つかる命名上の誤りを判断できます。

この単元で学ぶこと

  • 識別子として使える名前を判断する
  • 予約語とリテラルと型推論のvarを区別する
  • 宣言した名前と参照する名前の対応を追う

本文解説

文字列と名前を見分ける int score=4;System.out.print("score"+score)はscore4を表示します。引用符内のscoreは文字データで、引用符外のscoreだけが変数名です。同じ綴りが現れても役割を区別して読みます。

似た名前を表にする int total=3;int Total=8;total++;なら変更されたのは小文字のtotalだけです。変数を名前・現在値の組で書き出すと、total=4、Total=8になります。大文字違いの多用は読み間違いにつながりますが、それ自体は文法違反ではありません。

予約語を含む長い名前 forは予約語でもforCountは一つの合法な識別子です。予約語の文字列を部分として含む名前を一律に禁止するわけではありません。同様にtrueValueもbooleanリテラルtrueとは別の名前です。

未使用の予約語 constとgotoはJava 11で通常の文に使用する機能がなくても予約されています。int goto=2;は不正です。使用しない語なら変数名に使える、という推測は成り立ちません。

日本語の名前 UTF-8で保存したint 合計=12;は識別子として成立し、System.out.print(合計)は12です。Javaの識別子を英字だけへ限定する規則ではありません。共同開発では読み手や入力環境を考えた命名方針も別途重要になります。

区切られたブロックの同名変数 {int n=1;System.out.print(n);}{int n=2;System.out.print(n);}は有効範囲が重ならず12を表示します。外側でnを宣言し、その有効範囲内の内側ブロックで同名ローカルnを宣言する場合とは区別します。

varという語の位置 var var=4;では最初のvarが型推論、二つ目が変数名です。宣言後のvar++はその変数を増やします。特殊な語を変数名にできることと、読みやすい命名であることは同じではありません。型推論のvarには初期化子が必要です。

同じ名前を繰り返して読む int price=3;price=price+2;では右辺で現在値3を読み、加算結果5を左辺のpriceへ保存します。intがないため再宣言ではありません。名前の合法性、宣言か利用か、スコープの三段階を分けて判断します。

図解

名前の検査順
文法上使える名前でも、宣言していない場所からは参照できない。

重要ポイント

  • 名前は数字から始められないが、途中の数字は使える。
  • 大文字小文字は区別される。
  • classやintなどの予約語を変数名にできない。
  • Java 11では単独の_は禁止だが、_countは使える。

間違えやすい点

  • true/nullを通常の変数名にしない。
  • Javaの命名慣習を文法上の強制と混同しない。
  • 名前の似た別変数を同じものとして読まない。

用語解説

識別子
変数や型などを区別するための名前。
予約語
言語で用途が予約され、通常の識別子として使えない語。
スコープ
宣言した名前を参照できる範囲。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。