読者です 読者をやめる 読者になる 読者になる

Nanairo

プライベートを充実させてみたいものだ…。

アンパンを使ってプログラミングの基本を教える

この間、Active Directoryの情報を見るための簡単なアプリを作っていたのですが、後輩が興味を示したので、アプリ作成を少しだけ教えることに。

しかし、定義とか変数とか定数とか説明していたら(´・ω・`)って感じになってきたので、何かもっと分かりやすく教えることが出来ないのかなと思っていたら、後輩が食べていたアンパンが目に入ってそれを使って説明することに。ちなみに教えている言語はVBです。筆者もプログラマーではないので、C++とか、あまり高度なことはできないんですが、まあ興味を持ってもらったということで仕込んでいる次第です。


今回、VBを教える時にはこんなサンプルコードを使いました。

'サンプルコード(アンパンが大好きかを質問するプログラム)
'ファイル名:anpan.vbs

'変数宣言
Dim a '質問の答え

'メッセージでアンパンが好き否かを質問する。
a = msgbox("あなたはアンパンが好きですか?",vbyesno,"質問"'好きか嫌いかの返事=aによって、次のメッセージを表示させる。
if a = vbyes then
         msgbox("僕も大好きです。")
elseif a = vbno then
         msgbox("残念です。")
end if

'お掃除
a = nothing

① サンプルコードでやりたいこと
今回はアンパンが好きですか?という質問メッセージを表示させ「はい」を選択した場合は「僕も好きです。」、「いいえ」を選択した場合は「残念です。」と表示させます。

② 変数と定数
プログラムを書き始めた最初の時は、変数ってなんだ?とか定数ってなんだ?って思っていましたが、変数とは例えば
「あんぱんがすきか?」という質問に対しては全員が「はい」と答えるわけはなく、人の好みなので「はい」と言う人もいれば「いいえ」と答える人もいるわけです。ここで注目すべき点は「はい」、「いいえ」と人によって答え(結果)が変わっていることです。つまり人の好みや時間、その他の要素が加わった結果、値が変わるようなものを変数といいます。

本当はサンプルコードを一番上から説明していくべきなのですが、今回は3行目あたりから最初に説明します。

a = msgbox("あなたはアンパンが好きですか?",vbyesno,"質問"

ここでは、「はい」「いいえ」を選ばせるメッセージを表示させ、結果をaという文字にセットしています。このとき答える人によって、aの結果も「はい」のときもあれば「いいえ」のときもありますよね。したがって、aにセットされる質問の結果は答える人によって変わるわけですから、aは「変数」と言えます。

一方で定数とは誰が何と答えようが、変わらない固定値のことを指します。
次のサンプルコードを見てください。

Dim q  '質問
Const add = 7 '加算する日数

q = Inputbox("今日は何日ですか?")
msgbox("1週間後の日付は" & q + add & "です。")

このサンプルコードでは1週間後の日付を出すことを目的にしています。
例えば「今日は何日ですか?」という質問に対して「1日」と答えると1週間後は「8日」になるわけですが、この結果を導き出すには変数:qにセットされた値に「7」を加算する必要があります。これは誰がなんと言おうが、暦が変わらない限り7を加算しなければ正しい結果が導き出せません。

このように誰が何と答えようが反映させるべき固定の値があるとき、このような値を定数といいます。

③ 宣言とは
②では変数と定数の説明をしましたが、特に変数にいたっては例えば、

a = msgbox("あなたはアンパンが好きですか?",vbyesno,"質問"

とあるときに「はい」なり「いいえ」なりと答えるわけですが、この答えた結果というのは、別の場所にセットしておかないと、この後の処理で困ることになります。つまり、いちいち質問して値を得て行かないといけないので、非常にめんどくさい。

ですので、質問などをして得られた結果(変数)や固定で反映させたい値(定数)をセットする箱を作ろうというのが宣言という作業です。

Dim a '質問の答え
a = msgbox("あなたはアンパンが好きですか?",vbyesno,"質問"

ここではaという文字に質問の結果をセットしたいので、最初にaという箱を宣言します。
aのことを分かりやすく箱と言っていますが、正しくは変数です。
なぜならaに入る値というのは、質問の結果によって変わるからです。

この宣言という作業は一番最初にやっておくことがポイントです。
少なくとも変数を使う前に宣言しておく必要があります。

例えば、上記のサンプルコードの場合、aという文字が変数であることを宣言した上で、aは質問の結果を入れるようにコードが書かれているので、aは変数で、質問した結果はaにセットすればいいんだとパソコンは認識できるわけです。順番を逆にすると、aという文字は何かがパソコンはわからないので、エラーを返してきます。

ちなみにですが、これは定数でも使います。

Dim a '質問
Const add = 7 '加算する日数

変数の場合はdimステートメントを使って宣言するのに対して、定数の場合はconstステートメントを使って宣言します。サンプルコードでは、aというのは質問の結果をセットするための用途=つまり変数として宣言しているのに対して、addというのはaにどのような結果が入ってきても必ず7という値を反映させたい(=つまり7は定数となる)ので、Constを使って、addというステートメントには7を既にセットしています。

ちなみに宣言というのは、その変数がどのようなタイプなのかということまで正しく宣言することが本来なのですが、ここではめんどくさいので省略します。だって難しいし。

基本的にはこの変数、定数、宣言といろいろな決まり文句(ステートメント)を組み合わせて、プログラミングを行っていきます。

最初は難しい概念だなと思うんですけどね。
分かってくるとあーそういうことかとなります。

後輩にもアンパンを使って説明したら分かってくれました。

ちなみにどちらかというと筆者はプログラミングよりも製品を使う方が分野なので、この手の説明って中々、綺麗にできないんですが、間違っていたり、こういう風に説明するとわかりやすいというのがあれば教えてもらえるとうれしいです。