公開

変数と代入とは?「kazu = kazu + 1」から学ぶプログラミング入門

文:野澤 嘉孝 (ソフトウェアエンジニア/プログラミングスクール Sandbox 代表)

変数と代入とは?「kazu = kazu + 1」から学ぶプログラミング入門

この記事の概要

「kazu = kazu + 1」。両辺からkazuを引いたら、0=1になってしまうのでは? この表記の = は「等しい」ではなく、「右側の計算結果を左側へ入れる」という代入です。 kazu = kazu + 1 は、「今のkazuに1を足し、kazuをその値へ更新する」と読みます。

「kazu = kazu + 1」。両辺からkazuを引いたら、0=1になってしまうのでは?

この表記の = は「等しい」ではなく、「右側の計算結果を左側へ入れる」という代入です。

kazu = kazu + 1 は、「今のkazuに1を足し、kazuをその値へ更新する」と読みます。

先に結論:方程式として解かず、値の変化を追う

  • 変数=値を名前で扱う仕組み。 最初は「名前のついた箱」と考えると分かりやすい。
  • = は代入。 右側を計算してから、左側の変数を更新する。
  • == は比較。 等しいかを調べるだけで、変数の値は変えない。
  • 引用符があれば文字列。 "kazu" は文字、kazu は変数の値を表す。
  • 配列は添字で要素を指定する。 0始まりか1始まりかは、問題文の指定を確認する。

今回は共通テスト用プログラム表記を参考に、代入・表示・配列を順に読んでいきます。記号の意味は言語や教材で異なるため、ここでのルールとして押さえましょう。

数学ならおかしい1行が、プログラムでは動く理由

テッパン先輩が指さしたのは、たった1行でした。

kazu = kazu + 1

ユウキ「先輩、これ成り立たなくないですか。両辺からkazuを引いたら、0=1です」

テッパン先輩「うん。数学ならね」

Sandy「ちょお待ちぃ! そのイコール、今日は『等しい』の係やないねん」

数学の等式と違って、代入には処理の順番があります。kazuが5なら、まず右側のkazu+1を計算して6にし、それから左側のkazuを6へ更新します。

kazuの現在値5から右側のkazu足す1を計算し、結果6を左の変数へ代入する順序

代入は、右側を計算してから左側を更新する操作。

読む順番は、次の3段階です。

  1. 右側のkazuを読む。 今は5。
  2. 右側の式を計算する。 5+1=6。
  3. 左側のkazuを更新する。 新しい値は6。

右側で使うのは更新前の値、左側に設定するのは更新後の値です。同じ時点の値についての方程式ではないので、両辺からkazuを引く読み方はできません。

同じ命令を3回実行すれば、5→6→7→8と変わります。今の値を読み、計算し、更新する。この順番が見えると、プログラムを1行ずつ追えるようになります。

プログラミング言語は、手順を伝えるための書き方

前回学んだアルゴリズムは、問題を解く手順でした。それをコンピュータに実行させるため、決められた文法で書く道具がプログラミング言語です。

人が書いた高水準のプログラムを、CPUがそのまま日本語や英語のように理解するわけではありません。処理系を通し、最終的にはCPUが実行する機械語の命令などにつながります。

分類

特徴

高水準言語(高級言語)

人が手順を表現しやすいよう、機械の細部を抽象化している

低水準言語(低級言語)

機械の命令や構造に近い

「高級」は価格や優劣のことではありません。どれくらい機械の細部から離れて手順を書けるか、という違いです。

コンパイラとインタプリタは、実行の仕組みが違う

コンパイラはプログラムを別の表現へ翻訳する仕組み、インタプリタはプログラムや中間表現を解釈して実行する仕組みです。

入門では「先にまとめて翻訳する/解釈しながら実行する」と対比します。ただし、インタプリタが必ずソースコードを1行ずつ機械語へ訳すわけではありません。 中間コードへ変換してから実行したり、実行中にコンパイルしたりする方式もあります。

「コンパイラは必ず速い、インタプリタは必ず遅い」という速度だけで定義しないようにしましょう。

共通テスト用プログラム表記は、問題文のルールで読む

学校で学ぶプログラミング言語が多様であることから、大学入試センターは試作問題に「共通テスト用プログラム表記」を用意しています。特定の言語の文法をそのまま覚えるのではなく、問題で示される手順を読むための表記です。

公式の表記例には、代入、表示、四則演算、条件分岐、繰り返し、配列などが示されています。ただし、その資料自身が、異なる形式で出題する場合もあると説明しています。当該問題文の説明・指示が優先です。

以下のコードは、この表記を参考にした学習例です。実際の過去問からの引用ではありません。

変数は「名前のついた箱」と考えると分かりやすい

kazu = 5

この例では、kazuという名前で値5を扱います。箱に名前を付けて、値を入れたと考えると、最初の理解に役立ちます。

kazu = 8

続いてこの行を実行すると、kazuの値は8に切り替わります。これが上書きです。元の5を後で使いたければ、上書きする前に別の変数などへ残しておきます。

最初の値を設定することを初期化といいます。合計を計算する変数なら、まず0を設定する、といった使い方です。

「箱」は学習用の比喩です。ここでは「その名前で扱う値が切り替わる」と理解しましょう。上書きしても、元のデータがコンピュータ全体から消去されるという意味ではありません。

「=」は代入、「==」は比較

kazuへ6を入れる代入と、kazuが6かを調べる比較の違い

代入は値を更新し、比較は条件が成り立つかを調べる。

記述

意味

kazu = 6

kazuの値を6にする

kazu == 6

今のkazuが6と等しいか調べる

比較の結果は、成り立つなら真、成り立たないなら偽です。比較しただけでは、kazuの値は変わりません。

Sandy「1個は入れる。2個は比べる。同じイコールでも、仕事がちゃうねん」

この区別は、ここで扱う表記についてのものです。ほかの言語や教材で別の記号が使われていれば、その規則を確認します。

値の種類が違うと、同じ記号でも意味が変わる

一般のプログラミングでは、整数、実数、文字列、論理値などのデータ型を学びます。

種類の例

値の例

読み方

整数

3、−2

小数部分を持たない数

実数を扱う型

3.5、0.1

小数などを扱う。ただし表せる精度には制限がある

文字列

"こんにちは"、"1"

文字の並び

論理値

真、偽

条件が成り立つかどうか

これは一般的な型の整理であり、共通テスト表記が必ずこの4型を宣言させるという意味ではありません。

文字列では、数字の形をしていても数値とは区別します。

数値1足す1は2、文字列の1と1の連結は文字列11になる比較

同じ+でも、値の種類によって足し算や連結になる。

  • 数値の 1 + 1 は、足し算で2。
  • 文字列の "1" + "1" は、この表記では連結されて "11"。

引用符も手がかりになります。「数字が書いてあるから足し算だ」と決めつけず、何の値を扱っているかを確かめましょう。

名前の規則も、表記ごとに確かめる

大学入試センターの表記例では、変数名は英字で始まり、英数字とアンダースコアを使います。通常の変数の例はkosuやkingaku_kei、配列名はDataやTokutenのように先頭が大文字です。

すべての言語で同じ命名規則になるわけではありません。定数名や大文字・小文字の扱いについても、教材や問題の指示を確認します。「普通の変数はどの言語でも小文字で始めなければエラー」とは覚えないようにしましょう。

表示と演算子:引用符と割り算の記号に注意

表示したい値は、次のように書けます。

kazu = 6
表示する("kazu")
表示する(kazu)
表示する("個数は", kazu, "です")

ここで見るのは、引用符の有無です。

  • 表示する("kazu"):変数名と同じつづりの文字「kazu」を表示する。
  • 表示する(kazu):変数の現在値である6を表示する。
  • 表示する("個数は", kazu, "です"):文字と変数の値を組み合わせて表示する。

複数の文字列や数値は、カンマで区切って指定できます。

計算の記号も、算数と少し違います。以下の割り算の例は、正の整数どうしで考えます。

記号

役割

例

+

足す/文字列の連結

3 + 2 → 5

-

引く

7 - 2 → 5

*

掛ける

3 * 2 → 6

/

割る

7 / 2 → 3.5

÷

整数の商

7 ÷ 2 → 3

%

余り

10 % 3 → 1

たとえば、整数kazuが偶数か調べる条件は kazu % 2 == 0。2で割った余りが0かどうかを比較しています。

配列は、添字で要素を指定する

配列は、複数の値を並べてまとめて扱う仕組みです。 要素の位置を指定する番号を「添字」と呼びます。

Data = [10, 20, 30, 40, 50]

この例で添字を0から付けると、Data[0]は10、Data[2]は30です。

配列Dataの値10、20、30、40、50へ添字0から4を付け、Data2が30を指す例

0始まりでは添字2は3つ目の要素。当該問題文の指定を優先する。

添字2は、並びの3つ目の要素です。Data[1]へ99を代入すれば、変わるのは2つ目の要素になります。

公式の表記例は、特に説明がない場合は添字0からとしています。問題文に1始まりなどの指定があれば、その指定で読みます。最初の要素の添字と、最後の要素の添字を、先にメモすると間違いを防げます。

反復と変数を組み合わせて、配列の合計を追う

次のプログラムを、1行ずつ読んでみましょう。縦線と最後の記号は、繰り返す処理の範囲を示しています。

Data = [10, 20, 30, 40, 50]
goukei = 0
i を 0 から 4 まで 1 ずつ増やしながら繰り返す:
⎿ goukei = goukei + Data[i]
表示する(goukei)

最初にgoukeiを0にします。その後、iが0・1・2・3・4と変わるたびに、対応する要素を現在の合計へ足します。

配列の要素を順に足し、合計が0から10、30、60、100、150へ変わるトレース表

初期化を反復の前に行い、各周回で合計へ次の要素を足す。

i

足す値Data[i]

更新後のgoukei

0

10

10

1

20

30

2

30

60

3

40

100

4

50

150

表示される合計は150です。表示する(goukei) は反復の外にあるため、すべて足し終わった後に1回だけ実行されます。反復の中に置けば、途中の合計を周回ごとに表示する別の処理になります。

また、初期化した直後の0と、i=0の周回後の10は違う時点です。行を実行する前と後の、どちらの値かをそろえて表に書きましょう。

もし goukei = 0 を各周回の加算直前に置くと、それまでの合計が毎回0に戻り、最後には最後の要素50しか残りません。代入の意味だけでなく、何を何回実行するかも確認しましょう。

値を入れ替えるには、上書きする前に退避する

a=3、b=5を入れ替えたいとします。次の2行では、うまくいきません。

a = b
b = a

1行目でaが5に切り替わり、2行目でもその5を使うため、両方が5になります。元のaの3を残すために、補助変数tを用意します。

t = a
a = b
b = t
a3とb5を補助変数tで退避し、a5とb3へ入れ替える3行のトレース

tへ元のaを保存してから、aとbを順番に更新する。

これでa=5、b=3になります。途中の値を表にすると、上書きの順序が分かります。

実行した行

a

b

t

開始時

3

5

未設定

t = a

3

5

3

a = b

5

5

3

b = t

5

3

3

一時的にaもbも5になりますが、元の3がtに残っているので、最後にbへ戻せます。

ユウキ「aを上書きする前に、tへ3を残しておくんですね」

Sandy「せや。代入は一斉に起こるんやなくて、書いた順に進むんや」

練習として、最初がa=4、b=9の場合も追ってみてください。t=4を残し、a=9、b=4となります。この3行による入れ替えは、代入を順番に読む練習です。言語によっては、別の入れ替え用の書き方もあります。

まとめ:式を変形せず、値の変化を追おう

  • 今回の表記の = は代入。右を計算してから、左の変数を更新する。
  • == は等しいかの比較。比較だけでは値を更新しない。
  • 引用符、演算子、添字を見て、値の種類と対象を確かめる。
  • 反復では初期化と更新を分け、各周回の値を表に書く。
  • 配列の添字などは、当該問題文の説明を優先する。

ユウキは、もう一度あの1行を見ます。今度は方程式として変形せず、kazuの値を5、6、7、8と書き込めました。

テッパン先輩「……追えてるね」

プログラムを読む第一歩は、変数の値がいつ、どう変わるかを見ることです。

ほかのテーマは情報Ⅰサバイバルの記事一覧から読めます。実際にコードを書いて作品制作へ進みたい方は、プログラミングスクールSandboxもご覧ください。

参考資料

あわせて読みたい記事

Sandboxのサポート内容 Sandboxの情報Ⅰ学習サポートを見る →
共通テスト情報Ⅰのまとめ 共通テスト「情報Ⅰ」対策シリーズの一覧を見る →
野澤 嘉孝

この記事を書いた人

野澤 嘉孝

ソフトウェアエンジニア/プログラミングスクール Sandbox 代表

ソフトウェアエンジニア。同志社大学理工学部を経て、京都大学大学院で核融合発電の基礎研究(プラズマ物理)に従事。高校生向け数学塾の講師、大学での物理実験の授業を通じて延べ500名以上の学生をサポート。現在は業界特化型SaaSの開発に携わりながら、小中高生向けプログラミングスクール Sandbox を運営。

プロフィールと執筆記事の一覧 →

「情報Ⅰ、うちの子はどう対策すればいい?」

情報Ⅰ対策について無料で相談する

志望校の配点を一緒に確認したい方は → 無料の学習相談へ

入会金無料・いつでも退会OK・退会後もいつでも再入会できます