見出し画像

変数を覚えて欲しい!

こんにちは「つけらっとゲームス」プログラム担当のとちです。

これまでも何度か記事にしているのでご存知の方もいらっしゃると思いますが、いま、わたしは母校である専門学校で外部講師として「システム設計」を教えています。

関連記事としてこんなのもあります。お時間あったらご覧くださいね~!

外部講師を初めて2年目なので、まだまだ教え方が下手くそだなーと自覚しており、毎度のことながら、どうやって教えようかと思い悩む日々。

対象は3年制システム系学科の1年生、
この時期(4~5月)ですと基礎の部分を教える必要があります。
でも、システム系の基礎ってなんだろうね…

※変数の解説から読みたい方は「変数とはなんぞや?」へ飛んでください。



最初に理解したいこと

担当している内容が「システム設計」ですので直接コーディングするわけではありません。システムの設計部分(設計書、仕様書、アルゴリズム等々)の勉強がメインとなります。

んー、基礎的な部分でやっぱり重要なのは「変数」かなぁ?

以前もチラっと書きましたが、専門的にコンピュータ関連の学習をするとなると必要になる知識として「変数」というものがあります。

以前チラっと書いた記事はこれ(↓)

「変数」が何なのかを理解できないとシステム系学科の勉強は全体的に意味不明となってしまいます。だから早い段階で「変数」がどういうものなのかを自分の中で納得して欲しいと思っています。

しかしこの「変数」ってのは、理解してしまえば難しいものではないのですが、混乱してしまうポイントでもあります。


変数とはなんぞや?

「変数」って何なのかをウィキペディアさんに説明してもらうと、

変数 (プログラミング)

プログラミングにおける変数(へんすう、: variable)とは、高水準言語プログラムソースコードにおいて、扱うデータを読み書きする記憶域 (storage) のことであり、固有の名前識別子)によって識別される[1]。変数を用いることで、データを一定期間記憶し必要なときに利用することができる。高水準言語において、変数は記憶装置(メモリ)を抽象化する役割を果たす。

ウィキペディア(Wikipedia)より冒頭部を引用

うん、わからん!
何を書いているのか読んでもわかりませんね!

しかも「プログラミングにおける変数とは…」とあります。
つまり、プログラミング以外における変数もあるんです。それは数学!

ここで数学における「変数」を説明すると更に混乱すると思うので省略。
それでも気になる方はウィキペディアさんへ…… 【 ※ 変数(数学) 】


図で解説

変数の説明でよく見かけるのが「箱」という表現です。
前述した記事「算数が苦手過ぎるプログラマの話」の中でも「箱」という表現で説明しています。

前提条件として、
変数として「Kotae」「SuutiA」「SuutiB」という箱があります。
これらの箱には何も入っていません。

「SuutiA」に100を、「SuutiB」に140を代入します。
「SuutiA」と「SuutiB」を足したものを「Kotae」に代入します。
これを表現したものが下図です。

なんか理解できたような、そうでもないような…
ここで説明を終えたらふわっとした感じですよね?
プログラムコードを使って説明を続けます。


簡単なプログラムコードで解説

Unityエディタを起動しました。
エディタの使い方等はここでは詳しく説明しません。ごめんなさい。
変数についてだけ解説します。予めご了承くださいませ。

決まった値を表示する

まずコンソールに「HELLO WORLD」って表示するだけのプログラムを書いてみましょう。実行結果がこうなるヤツですね(↓)

書いたプログラムコードはこんな感じです。

		Debug.Log("HELLO WORLD");

「Debug.Log」によってコンソールにデバッグログを表示します。
表示する内容は括弧の中の ”HELLO WORLD” です。
すごく単純ですね。

これは変数ではありません。
決まった値(文字列であっても数値であっても)を定数といいます。

変数を定義してみる

では変数を使用してみましょう。
プログラムコードはこんな感じです。

	string wText = "HELLO WORLD";
	Debug.Log(wText);

実行結果は同じですがプログラムコードの説明をすると、

「string」は文字列を入れる変数を定義しています。
「wText」これが変数です。変数にwTextという名前を付けています。

「wText = "HELLO WORLD"」
このように表記すると変数「wText」に "HELLO WORLD" を代入します。
(ここでは"HELLO WORLD"と決め打ちしてるので定数でもありますね…)

「Debug.Log」でコンソールにデバッグログを表示します。
その表示内容は括弧の中の変数「wText」です。

wTextの中には何が入っていたでしょう?
"HELLO WORLD" でしたよね。なので実行結果は同じなのです。

変数の説明としてはこれで終わりなのですが、疑問が出てきますよね。
「変数を使ったら難しくなる、書く行も増えた、じゃぁ必要なくね?」

そうなんですよね、
「じゃぁ定数でプログラム書けばいいじゃん!」となりそうです。

ここで説明が終わっちゃうと変数は理解できないと思うんです。
もう少しだけ解説を続けますね。


条件アリのプログラムコードで解説

現時刻の秒数を表示するプログラムを考えましょう。
実行結果は以下のようになります(↓)

現在時刻18:33:10 なので 「10」 が表示されます。
現在時刻18:33:24 なので 「24」 が表示されます。

では、書いたプログラムコードはどうなるでしょう?

Debug.Log(DateTime.Now.Second);

はい、これも単純ですね。
先程同様「Debug.Log」でコンソールにデバッグログを表示します。
表示内容は「DateTime.Now.Second」です。

複雑な説明をすると混乱しちゃうので今は何も考えずに、この表記をすることで現在の秒を表示できるくらいに思ってください。

では、更に条件を追加します。
現在の秒数が偶数なら「偶」も一緒に表示し、奇数なら「奇」も一緒に表示するプログラムを書きます。

現在時刻19:10:12 なので 「12偶」 が表示されます。
現在時刻19:11:31 なので 「31奇」 が表示されます。

このプログラムコードは?

	if(DateTime.Now.Second % 2 == 0)
	{
		Debug.Log(DateTime.Now.Second + "偶");
	}
	else 
	{
		Debug.Log(DateTime.Now.Second + "奇");
	}

はい、一気に長くなりましたね。
「if」は条件分岐です。括弧の中に条件を書きます。
「DateTime.Now.Second」は前述通り秒を取得しています。

プログラムコードの中での「%」は割り算した余りを意味します。
つまり「2」で割って余りが「0」です。となると偶数ですね。

「else」それ以外の場合(余りがある場合)は奇数と判断しています。
それぞれのDebug.Logの括弧の中に秒と「偶」または「奇」を入れてます。

ここで思うのが、
何回もDateTime.Now.Secondって書くの面倒臭いですよね……

変数を使って書くと?

それでは変数を使ってみましょう。
もちろん実行結果は同じです。

	int wSec = DateTime.Now.Second;
	if(wSec % 2 == 0)
	{
		Debug.Log(wSec + "偶");
	}
	else 
	{
		Debug.Log(wSec + "奇");
	}

なんかスッキリしました。
プログラムコードの説明をしますね。

「int」は整数を入れておく変数を定義します。
「wSec」が今回の変数名です。

変数「wSec」の中に「DateTime.Now.Second」を代入します。
つまり「wSec」の中身は現在の秒数となります。

「wSec」に対し「%」を使って割り算の余りを計算します。
「2」で割って余りが「0」の場合は偶数ですね。
「else」上記以外の場合、つまり余りがあると奇数です。

いまの例を見ると変数を使う意味が出てきますよね?
「DateTime.Now.Second」を何度も書く必要が無くなりました。

そして変数定義した「wSec」は、このあとプログラムコードが続いても、
他に代入されたものが無ければ秒数として再利用することができます。

変数名は自分にわかりやすく命名することができます。
ちなみに「wSec」は「Working Area」(作業領域)と、Secondの頭3文字を組み合わせたモノです。もっと短くてもいいですし長くてもいいです。

人間が見て、意味を把握しやすい変数名にできた方がいいですよね?


おわりに

いかがでしょうか?
基本的な部分だけど混乱しそうな箇所を詳しく説明してみました。

すごく難しそうなことを書いていますが、普段はこんなゲームを作っているサークルの人です。ご興味がございましたらご覧ください(↓)

それでは、また別の記事でお会いできるのを楽しみにしております!



この記事が気に入ったらサポートをしてみませんか?