変数を宣言する

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

このレッスンで分かること

  • 型 名前 = 値; の順で必ず型を先に書きます
  • int は整数、double は小数、boolean は真偽値、String は文字列
  • 最小例は int result = n + 1;return result;

変数を宣言する とは

プログラムでデータを覚えておくための「箱」、変数を宣言してみよう。Java の int 型と = の意味を理解する。

データを覚えておく「箱」を作る

プログラムを書いていると、「あとで使う値をどこかに置いておきたい」という場面がひっきりなしに出てきます。たとえば「ユーザーが入力した年齢」「計算の途中結果」「画面に表示する合計金額」などです。こうした値を置いておくための仕組みが 変数 (variable) です。

変数はよく「データを入れる箱」にたとえられます。箱には名前 (ラベル) が付いていて、中には値が 1 つ入ります。名前を呼べばその箱の中身を取り出せるし、新しい値を入れ直すこともできます。プログラムが扱うデータは、ほぼすべて何らかの変数に入って動き回っている、と思ってよいくらい基本の道具です。

変数は「メモ帳に書いた数字」とイメージしてもよいです。たとえば買い物中に消費税を計算するとき、いったん 小計 をメモして、それに 0.1 を掛けて、もとの数字に足す。あの「メモする」がプログラムでは変数宣言にあたります。

さて、Java で変数を作るときには、ほかの言語と少し違う特徴があります。それは 変数を作る前に、その箱に入れる値の「型」を必ず宣言する という点です。PythonJavaScript のように「いきなり x = 5 でいい」というわけにはいきません。

Java の変数宣言の基本形

Java で変数を宣言する書き方は、ものすごく単純です。

Java

型 名前 =;

この 1 行ですべてが決まります。具体的に整数を入れる変数を 1 つ作ってみましょう。

Java

int age = 20;

この 1 行は、「int 型の age という箱を作って、その中に 20 を入れる」という意味になります。順番に分解します。

  • int — 箱に入る値の 。これは整数 (integer) を入れる型
  • age — 箱の 名前 (変数名)。あとからこの名前で中身を呼び出す
  • = — 「右の値を左の箱に入れる」という代入の記号
  • 20 — 箱に入れる
  • ; — 文の終わりを表すセミコロン (Java では必須)

小学校で習った数学の = (左右が等しい) とは意味が違うことに注意してください。プログラミングの =代入 (assignment) で、右辺の値を左辺の変数にコピーする操作です。

x = x + 1」という式が数学的にはおかしく見えるのは、= を等号だと思っているからです。これを「x + 1 の結果を、新しく x に入れ直す」と読めば、矛盾なく理解できます。

Java の基本データ型

今回登場した int 型は、Java で最もよく使う型のひとつです。intinteger の略で、整数を入れる箱です。-2147483648 から 2147483647 までの範囲の整数を表せます。

似たような数値の型には次のようなものがあります。

用途
int32 bit 整数 (普段はこれ)int age = 20;
long64 bit 整数 (大きな数)long pop = 8_000_000_000L;
double小数double pi = 3.14;
boolean真偽値boolean ok = true;
String文字列String name = "Ada";
char文字 1 個char c = 'A';

まずは「整数なら int、小数なら double、真偽値なら boolean、文字列なら String」と覚えてしまえば十分です。

宣言と代入は別の操作

ここでひとつ大事な区別があります。宣言 (declaration)代入 (assignment) は別の操作です。1 行で同時にやることが多いだけで、本当は分けて書くこともできます。

Java

int score; // 宣言だけ (まだ何も入っていない) score = 100; // 代入 (ここで 100 が入る)

上の 2 行は、次のように 1 行で書くのと同じ意味です。

Java

int score = 100; // 宣言と代入を同時にやる

さらに、いったん値を入れた変数に、別の値を入れ直すこともできます。

Java

int score = 100; score = 80; // 中身を 80 に上書き score = score + 5; // 中身に 5 を足したものを入れ直す → 85

この動きを図にすると、変数というのは「上書き可能なメモ」のような存在だと見えてきます。

diagram (will load when visible)

図の流れを順序リストで書き直すと、次の通りです。

  1. 変数 n10 が入っている
  2. n + 1 を評価する
  3. 計算結果 11 が一時的に生まれる
  4. result という新しい箱を宣言する
  5. result11 を代入する
  6. return result; で呼び出し元に値を返す

int result = n + 1; という 1 行が、内部では「右辺を計算 → 左辺の箱を作る → そこに結果を入れる」という 3 ステップに分かれている、というイメージを持っておくと、このあと出てくる演算や代入の話がとてもラクになります。

変数名のルール

Java では変数名にいくつかルールがあります。これを守らないとコンパイルエラーになります。

  • 半角の英字・数字・_ (アンダースコア)・$ が使える
  • 数字から始めてはいけない (1st はダメ、first は OK)
  • スペースや - (ハイフン) は使えない
  • int class public return などの 予約語 は使えない
  • 慣習として camelCase (キャメルケース) を使う (userAge totalPrice のように、最初は小文字、続く単語の頭は大文字)
  • 大文字と小文字は区別される (ageAge は別の変数)

変数名は他人 (未来の自分含む) へのラブレターです。a b tmp のような名前ではなく、age totalPrice userName のように「何が入っているか」がひと目でわかる名前を付ける癖をつけましょう。コードの読みやすさが段違いになります。

よくある間違い

初心者がやりがちな失敗を 4 つ紹介します。

  • 型を書き忘れるage = 20; のように、いきなり代入から書くとエラーになります。Java では最初に必ず int age = 20; のように型を書く必要があります
  • 変数名を数字から始めるint 1stScore = 100; はコンパイルエラー。int firstScore = 100; のように英字始まりにします
  • 初期化せずに使うint x; System.out.println(x); のように、値を入れる前にローカル変数を使うと variable x might not have been initialized と怒られます
  • 型と合わない値を代入するint age = "20"; のように、int 型の箱に文字列を入れようとするとエラーになります。int age = 20; のように、型と値の種類を合わせましょう

もうひとつ地味によくあるのが、; (セミコロン) の付け忘れです。Java では文の終わりに必ず ; が要ります。int score = 100 (最後の ; なし) は即エラーです。

「コンパイラに怒られた数だけ強くなる」と思ってください。cannot find symbol ; expected variable might not have been initialized のような英語が並んでいたら、まず深呼吸して該当行を見直しましょう。

この章のポイント

ここまでの要点 型 名前 = 値; の順、文末は ;、camelCase、英字始まり。ローカル変数は使う前に必ず初期化する。

やってみよう

このレッスンの課題は、Solution.addOne(int n) メソッドを完成させることです。手順は次の通りです。

  1. 右側のエディタを開く
  2. メソッドの中に int result = n + 1; と書いて、n + 1 の結果を result という新しい変数に入れる
  3. 次の行に return result; と書いて、その箱の中身を返す
  4. 「実行」ボタンを押して、テストが全部緑になることを確認する

ここでのポイントは、わざわざ result という変数を 1 つ通している ところです。return n + 1; と書けば 1 行で済みますが、いったん result に入れることで、デバッガで中身を確認したり、あとから別の計算を挟んだりしやすくなります。

慣れてきたら、result の代わりに answernext など、自分のしっくりくる名前に変えてみてください。int answer = n + 1; と書いてもテストは通るはずです (もちろん return answer; も合わせて書き換えること)。変数名は自由に付けられる、というのを手で確認するのが大事です。

さらに余裕があれば、int two = 2; のような変数を 1 つ追加して、int result = n + two; と書いてみるのも面白いです (このままだとテストは fail しますが、自分で挙動を変えてみる練習になります)。変数は何個でも作れる、ということを実感してみてください。

よくある質問

Q. 変数名のつけ方にルールはありますか?

A. 意味が一目で分かる名前を付け、1 文字(a, b)は短いループカウンタだけに使うのが原則です。Python は snake_case(user_name)、Java や JavaScript は camelCase(userName)が慣習です。略語の乱用は避け、count を cnt と書くより count のまま書きましょう。

Q. let と var、Python の変数の違いは?

A. Python は宣言キーワードなしで代入即作成です(x = 1)。JavaScript の let はブロックスコープ、var は関数スコープで巻き上げが起きるため、現代のコードでは let / const を使います。再代入しない値には const を選び、意図を読み手に伝えましょう。

Q. 宣言した変数の値はあとから変えても良いですか?

A. 型が変わらない範囲ならいつでも代入し直して構いません。ただし途中で意味(例えば user_id にカウントを代入)を変えると追跡が難しくなるため、別の名前にした方が読みやすくなります。再代入したくない値は Python なら大文字定数、JS なら const にすると意図が伝わります。

次のレッスン

次は データ型の使い分け で、プログラムでデータを覚えておくための「箱」、変数を宣言してみよう を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. 変数の宣言 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. 変数の宣言 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

要件

  1. クラス名は Solution、メソッド名は addOne、引数は int n 1 つにすること
  2. メソッドの中で int result = n + 1; のように、新しい変数 result を宣言して n + 1 の結果を代入すること
  3. 最後に return result;result の中身を返すこと (return n + 1; のように直接返さない)

入出力例

test-cases.txt

addOne(5)6 addOne(-3)-2 addOne(0)1 addOne(100)101

ヒント

main.java
main.java
学習モード

メモ

変数を宣言する

⌘S で保存