変数を宣言する
このレッスンで分かること
型 名前 = 値;の順で必ず型を先に書きますintは整数、doubleは小数、booleanは真偽値、Stringは文字列- 最小例は
int result = n + 1;→return result;
変数を宣言する とは
プログラムでデータを覚えておくための「箱」、変数を宣言してみよう。Java の
int型と=の意味を理解する。
データを覚えておく「箱」を作る
プログラムを書いていると、「あとで使う値をどこかに置いておきたい」という場面がひっきりなしに出てきます。たとえば「ユーザーが入力した年齢」「計算の途中結果」「画面に表示する合計金額」などです。こうした値を置いておくための仕組みが 変数 (variable) です。
変数はよく「データを入れる箱」にたとえられます。箱には名前 (ラベル) が付いていて、中には値が 1 つ入ります。名前を呼べばその箱の中身を取り出せるし、新しい値を入れ直すこともできます。プログラムが扱うデータは、ほぼすべて何らかの変数に入って動き回っている、と思ってよいくらい基本の道具です。
変数は「メモ帳に書いた数字」とイメージしてもよいです。たとえば買い物中に消費税を計算するとき、いったん
小計をメモして、それに0.1を掛けて、もとの数字に足す。あの「メモする」がプログラムでは変数宣言にあたります。
さて、Java で変数を作るときには、ほかの言語と少し違う特徴があります。それは 変数を作る前に、その箱に入れる値の「型」を必ず宣言する という点です。Python や JavaScript のように「いきなり 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 で最もよく使う型のひとつです。int は integer の略で、整数を入れる箱です。-2147483648 から 2147483647 までの範囲の整数を表せます。
似たような数値の型には次のようなものがあります。
| 型 | 用途 | 例 |
|---|---|---|
int | 32 bit 整数 (普段はこれ) | int age = 20; |
long | 64 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この動きを図にすると、変数というのは「上書き可能なメモ」のような存在だと見えてきます。
図の流れを順序リストで書き直すと、次の通りです。
- 変数
nに10が入っている - 式
n + 1を評価する - 計算結果
11が一時的に生まれる resultという新しい箱を宣言するresultに11を代入するreturn result;で呼び出し元に値を返す
int result = n + 1; という 1 行が、内部では「右辺を計算 → 左辺の箱を作る → そこに結果を入れる」という 3 ステップに分かれている、というイメージを持っておくと、このあと出てくる演算や代入の話がとてもラクになります。
変数名のルール
Java では変数名にいくつかルールがあります。これを守らないとコンパイルエラーになります。
- 半角の英字・数字・
_(アンダースコア)・$が使える - 数字から始めてはいけない (
1stはダメ、firstは OK) - スペースや
-(ハイフン) は使えない intclasspublicreturnなどの 予約語 は使えない- 慣習として
camelCase(キャメルケース) を使う (userAgetotalPriceのように、最初は小文字、続く単語の頭は大文字) - 大文字と小文字は区別される (
ageとAgeは別の変数)
変数名は他人 (未来の自分含む) へのラブレターです。
abtmpのような名前ではなく、agetotalPriceuserNameのように「何が入っているか」がひと目でわかる名前を付ける癖をつけましょう。コードの読みやすさが段違いになります。
よくある間違い
初心者がやりがちな失敗を 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; expectedvariable might not have been initializedのような英語が並んでいたら、まず深呼吸して該当行を見直しましょう。
ここまでの要点
型 名前 = 値; の順、文末は ;、camelCase、英字始まり。ローカル変数は使う前に必ず初期化する。
やってみよう
このレッスンの課題は、Solution.addOne(int n) メソッドを完成させることです。手順は次の通りです。
- 右側のエディタを開く
- メソッドの中に
int result = n + 1;と書いて、n + 1の結果をresultという新しい変数に入れる - 次の行に
return result;と書いて、その箱の中身を返す - 「実行」ボタンを押して、テストが全部緑になることを確認する
ここでのポイントは、わざわざ result という変数を 1 つ通している ところです。return n + 1; と書けば 1 行で済みますが、いったん result に入れることで、デバッガで中身を確認したり、あとから別の計算を挟んだりしやすくなります。
慣れてきたら、result の代わりに answer や next など、自分のしっくりくる名前に変えてみてください。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 つができることを確認しましょう。
- 変数の宣言 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. 変数の宣言 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- クラス名は
Solution、メソッド名はaddOne、引数はint n1 つにすること - メソッドの中で
int result = n + 1;のように、新しい変数resultを宣言してn + 1の結果を代入すること - 最後に
return result;でresultの中身を返すこと (return n + 1;のように直接返さない)
入出力例
test-cases.txt
addOne(5) → 6
addOne(-3) → -2
addOne(0) → 1
addOne(100) → 101