09.配列変数


ここでいきなりですが、たとえば笑点メンバーを全員表示する時、
今までのやり方ですと、こんな組み方をしなければなりませんでした。

02
結果は一応こんな感じです。
実際に組んでいただければよくわかると思いますが、
めちゃくちゃややこしいですよね(;・∀・)
特に人数分の変数を準備しなきゃいかんのが大変です。
司会者と回答者が分かれているのは仕方ないとしても、
せめて回答者だけでも一つの変数にまとめることができれば……と思いません?

そんなときに使うのが『配列変数』という変数です。
今までの変数と違って、複数のデータを代入出来るのが強みです。
よく『普通の変数は一軒家』『配列変数は集合住宅』なんて言われますね。
イメージ的にはこんな感じ。
01
説明し辛いwww
これをうまく理由すれば、同じカテゴリの複数データをまとめて一つの変数にいれられます。
今回でいえば、笑点メンバーの回答者全員を、
一つの配列変数にまとめて入れてしまうわけなんです。

というわけで、先ほどの笑点メンバーのプログラムですが、
配列を利用するとこんな感じにできます。

これで走らせてもらえれば、さっきのと変わらない結果が出ると思いますよ。
さっきのに比べて、ちょっとすっきりしたと思います。
少なくとも管理してる変数の数が7つから2個に減ってるので、
その辺は心理的負担が小さいですよね。

キモはこの部分。

ここで変数memberに各メンバーの名前をまとめて代入してます。
代入したデータは左から0,1,2,3,4,5の番号が自動で振られて、
それぞれ使う時は『変数memberの0番のデータをちょうだい』
的な感じで指定してあげます。

今回のケースでいえば、実際に指定しているところはここ。

こんな感じで、『変数memberの0番』を使う時は、
『member[0]』て指定してあげます。
ちなみに、この番号のことを『添字』といいます。

さて、この配列変数への値の代入ですが、
ちゃんと変数らしく代入し直しが出来ます。
ちょうど先ほどのプログラムですと、笑点メンバーは古いメンバーのままなので、
途中で新しいメンバーに変更してみます。どすっ

こんな感じです。結果はこちら。
03

キモはここ。

上の木久蔵師匠→木久扇師匠への変更は、一つだけですが、
複数のデータを一変に変更する場合は、こんな感じで指定してあげれば可能です。
意味合いとしては『3番から5番までを、それぞれ”昇太”、”園楽”、”たい平”に変更してね』
て感じでしょうか。

こんな感じで、データの変更も可能です。

さらに言うと、今回は名前だけの配列ですが、
配列の中に配列を入れるという、ややこしいことも可能です。

この辺は『多重配列』もしくは『多次元配列』って言ったりします。
今回のケースでいえば、二重の配列になってるので『2次元配列』て言ったりしますね。
配列全体がエクセルの表みたいになってるとでも言えばいいのでしょうか。
結果はこんな感じです。
04

キモはここ。

配列として代入するデータの一つ一つをさらに配列にしたって感じですかね。
こういう使い方もできるのです。

指定の仕方は、『member[0]の0番』という指定の仕方ですね。
つまり『member[0][0]』て感じです。

さて、ここまでやってて『いや別に普通の変数でよくね?(;・∀・)』て思いません?
実際、今のままではあまり配列変数の良さってよく分からんのですよ。

ですがこの配列変数……実は今まで学んできたある処理と組み合わせると、
使い勝手と便利さが恐ろしく向上します。

それは、『08.繰り返し』で学んだ、『While文』と『for文』。
この2つと配列変数を組み合わせてはじめて。配列変数はその便利さが発揮されるのです(・∀・)

というわけで、おれが好きなfor文を使って、上のプログラムをちょいと書き換えてみました。

これでもさっきと同じ結果が出るはずです。
キモはここ。

要は今まで『member0を表示して』『member1を表示して』ていちいち指定してたのを、
繰り返しが得意なfor文を駆使して、指定する番号をどんどん変化させてるわけなんですよ。
今回は笑点メンバーなので人数が少なくてよいのですが、
たとえばこれがAKB48メンバーだとしたら、
48回もこっちでいちいち指定するのもしんどいですよね。
そんなときにはこのfor文、もしくはwhile文を使って、
ひたすら表示を繰り返してやればいいのです。

というわけで、for文の中にさらにfor文を突っ込んで、
表示する項目を増やしてみました。それがこちらっ

これは各メンバーの現在の獲得枚数も配列に与えまして、
その上で各項目の表示もfor文で回してみました。
要は多重繰り返し構文。ついでに条件分岐のcase文も組み合わせてみました。

この結果はこちら。
05

さて、先ほど
for文while文と組み合わせると、使い勝手と便利さが恐ろしく向上します( ・´ー・`)どや』
と説明させていただいたのですが……

どうもこの配列変数と繰り返し構文の組み合わせ。
プログラミング初心者が挫折する鬼門らしいです(;・∀・)
なんでも、考えてるうちにどんどんわけがわからなくなるんだとか。
おれも最初の頃はさっぱり分からんかったですからねぇ……(´・ω・`)

ちなみにおれが挫折仕掛けの頃に心がけたのが、
いちいち紙に書いてみること。
繰り返し構文をいくつも重ねて回していると、
ほんとに意味がわからなくなってきます(;・∀・) だれだってそう。

そんな時は、配列変数の中味を紙に書いてみます。
繰り返し一回目の変数の中味、二回目の変数の中味……
そんな感じで、その繰り返しの中で参照する変数の中味を紙に書き出してみます。
そうして慌てずゆっくり、時間をかけて組み立ててあげれば、ちゃんと出来上がりますよ。

あとは、ひたすら組んで慣れるのが一番ですかね。
こういうのは場馴れするのが一番です。間違ったってパソコン壊れたりはしないですし、
いっぱい間違えていっぱいエラー出して、今のうちにエラーに慣れておくといいです。

プログラマーのたった1回の成功の影には、
数えきれないほどの回数のエラーがあるのですよ(・∀・)

そのうち『fatal error致命的なエラー)』なんかが見慣れてきたら一人前っぽい?w