プログラミング入門5.繰り返し処理で100倍の効率アップ!

 

こんちゃっす、ダイブツです。

今回は、プログラムを書く時には必ず使うといっても過言ではない「繰り返し処理」というものを勉強していきましょう。

この繰り返し処理が使えるようになることで、たった4行のプログラムで6個でも100個でも四角形が描けるようになるスキルを身に付けることができますよ。

つまり、たくさんの処理をさせるプログラムが、めっちゃ簡単になります!

 

繰り返し処理の使い方

さて、ここまで講座を進めてきたあなたなら繰り返し処理とは何かもうお分かりですよね?

そうです、プログラミング入門講座1でやった繰り返し処理のことなんです。

⇒プログラミング入門講座1(迷路編)はこちら

⇒プログラミング入門講座1(タートル編)はこちら

 

その入門講座1で伝えていたように、繰り返し処理を書く方法は実は2種類あるんです。

まずはその2種類の書き方を見ていきましょう。

ただ、今回の内容は後から学ぶif文の講座と関わる部分があります。

なので、一旦今回の概要を確認してからif文の講座を見ると、より今回の内容について理解が深まるので見てください。

 ⇒if文の講座はこちら

 

繰り返し処理1:while文の書き方

まず最初にwhile文の書き方を見ていきましょう。

whileを使って6回繰り返す処理を簡単に書くとこうなります。

 

int i = 1;

while(i <= 6){
  繰り返したい処理
  i++;
}

 

これはiが6以下の時は{}内の処理を繰り返すという書き方になります。

つまり、

1、繰り返したい処理
2、i++;

の処理を1→2→1→2→…→1→2と6回繰り返すということです。

 

そして、サラッと書いていますが、「i++」というのは、「i = i + 1」を略した書き方です。

なので、最初に「i++」を実行する時は、iの値が1なので、1 + 1 = 2の値がiに代入されるということです。

この「i++」を6回実行するとiの値が7になりますよね?

そうすると、iが6よりも大きくなったということで、while(i <= 6)の内容と異なったから処理を止めるという動き方をします。

これがwhile文の書き方です。

 

「i++」が出てきたので、ついでに他の計算も覚えておきましょう。

 

四則演算のプログラミング

+-×÷は計算で必須というぐらいよく使う記号ですよね。

もちろんプログラムでもこの計算をすることはできます。

 

+と-は半角でそのまま書けばいいんですが、×と÷は別の書き方をします。

そのまま半角で書ける記号がないですもんね。

それぞれプログラムで使う記号はまとめて書き出しますね。

 

・+:+
・-:-
・×:*(アスタリスク)
・÷:/(バックスラッシュ)

 

最初は慣れていないとどの記号を使ったらいいのか迷うかもしれません。

でもこれも使っていたら自然と覚えていくので、計算をしたくなったらこの記事を再確認して使ってみましょう。

 

それと、さっき使っていた「i++」ですが、「i- -」も書くことができます。こっちは引き算の処理ですね。

こう書くと「i**」とか「i//」も書けそうな気がしてくるんですが、掛け算とか割り算は何故かないんですよねぇ。使わないからかな?

ちなみに「i++」のように足していくことをインクリメント、「i- -」のように引いていくことをデクリメントと言うので覚えておきましょう。所々で使われる言葉です。

 

よし、じゃあこれで計算方法はオッケーですね♪

 

繰り返し処理2:for文の書き方

次はもう1つの繰り返し処理、for文の書き方について説明していきます。

まずはwhileと同じように6回繰り返す処理を簡単に書いてみますね。

 

for(int i = 1; i <= 6; i++){
  繰り返したい処理
}

 

こっちはwhileと比べて大分スッキリとしてますね。

それもそのはず、for文の方は、一行に変数の宣言と繰り返す条件、定義した変数を計算する式をまとめて書いているんです。

 

だからちょっとややこしいんですが、for文のint i = 1;は最初の1回だけしか実行されません

後の繰り返し処理ではi <= 6;とi++だけが繰り返されます。

 

あと今更ですが、変数名がiになっていることに違和感はありませんでしたか?

そう、前回の変数編で話していた変数名の付け方が実践されていないんです。

 

というのも、この繰り返し処理に使う変数は、何故かiかjかkを使うのが基本の形として教えられるんですよね。

詳しい理由は僕も知りません。というかほとんどのプログラマーは知らずに使っています。

なので、そういうものだと思っておくのが手っ取り早いです。

最初に使うならi、その次ならj、その次にk…といった順番で使っていくのが多いですね。

別に他の変数名でもいいんですが、これが一番無難です。

 

whileとforの使い分け方

ここまで読んで、whileとforの違いは分かりましたね?

while文で()内に記述するのは繰り返し条件のみだけど、for文は変数の宣言と繰り返し条件、計算式の3つが必要になるというのが、whileとforの違いです。

 

じゃあどうやってこの2つを使い分けていくのがいいんでしょうか?

 

まぁ正直言うと、どっちの処理を使ってもいいんですけどね。繰り返すのは同じだし。

もうこの辺りは個人の好みによって変わってくる所です。

つまり、whileとforの好きな方を使えばいーんです

 

個人的には変数の宣言がいらなかったらwhileを使ったりしていますが、使いたい方を使っていきましょ。

使っていくうちに、「こっちの処理は使いにくいな」と感じたらもう片方の繰り返し処理を使っていけばいいだけの話です。
そんな気にするまでの話ではないってことっすね!

 

プログラマーの9割が経験しているミスって?

実は今回説明している繰り返し処理、不具合が発生しやすい箇所TOP10ぐらいに入る箇所があります。

それは処理を繰り返す回数の間違いです。

 

あなたは下の4つのパターンで、それぞれ処理が何回繰り返されるか分かりますか?

 

例1

for(int i = 0; i <= 6; i++){
 処理
}

 

例2

for(int i = 1; i <= 6; i++){
 処理
}

 

例3

for(int i = 0; i < 6; i++){
 処理
}

 

例4

for(int i = 1; i < 6; i++){
 処理
}

 

 

分かりましたか?

答えはこの通りです。

 

例1:7回

例2:6回

例3:6回

例4:5回

 

思っていた回数と合っていましたかね?

これよく混乱しやすくなるんですよね~。

 

ここで注意するべきなのが、この2つのポイントです。

 

・変数が0から始まっているのか1から始まっているのか。

・<を使っているのか<=を使っているのか。

 

このポイントさえ注意しておけば、繰り返し回数を間違う可能性はグッと減ります。

ただ本当に間違いやすい箇所なので、毎回注意深く確認するようにしてくださいね。

 

それじゃあこの繰り返し処理を実際に使って四角形を書いていってみます。

 

繰り返し処理を1つ使った例

まずは、この記事の冒頭で見せた、四角形を6個描くプログラムの例になります。

 

下のプログラムを見てもらってわかるように、四角形を描くfor文の処理が4行しかありません

もし四角形の数を変えたければ、あとはRECT_X_NUMを変更すればいいということです。
プログラムを変えるのめっちゃ簡単ですよね!

こりゃー使わない手はありませんよ。

 

int iRectSize = 50;
int iRectPosX = 20;
final int RECT_X_NUM = 6;
final int RECT_INTERVAL = 100;

size(600,400);

for(int i = 1; i <= RECT_X_NUM; i++){
  rect(iRectPosX,20,iRectSize,iRectSize);
  iRectPosX = iRectPosX + RECT_INTERVAL;
}

 

繰り返し処理を2つ使った例

それじゃあ今度は一歩進んで、繰り返し処理にさらに繰り返し処理をくっつけちゃいましょう。

そうすることで、X方向に増えていく四角形と、Y方向に増えていく四角形をまとめて書くことができるようになるんです。

実行結果とプログラムを見るとこうなりますね。

 

int iRectSize = 50;
int iRectPosX = 20;
int iRectPosY = 20;
final int RECT_X_NUM = 6;
final int RECT_Y_NUM = 4;
final int RECT_INTERVAL = 100;

size(600,400);

for(int j = 1; j <= RECT_Y_NUM; j++){
  for(int i = 1; i <= RECT_X_NUM; i++){
    rect(iRectPosX,iRectPosY,iRectSize,iRectSize);
    iRectPosX = iRectPosX + RECT_INTERVAL;
  }
  iRectPosX = 20;
  iRectPosY = iRectPosY + RECT_INTERVAL;
}

 

これは、最初に1番上の行に四角形を6個描く処理を実行して、次に2行目にも同じ処理、3行目以降にも・・・

という具合に、X方向に繰り返す処理を、さらにY方向に繰り返しているんです。

 

たったこれだけのプログラムなのに、画面一杯に四角形を書けちゃうって凄くないですか?!

こういう大量の単純作業を一気にやれちゃうのがプログラミングの強みです。

数ある強みの中でも1番のものですね。

こういうことができるから、色んなツールが産み出されていくんですよー。

是非あなたにも、簡単でいいので役に立つツールを作り上げてくれることを願っています。

 

繰り返し処理を強制的に中断する方法

さて、こんな便利な繰り返し処理ですが、場合によっては繰り返しを中断したい!ということも起きてきます。

そんな時に繰り返し処理を中断させる書き方、あります。

それがこのbreakというものです。

 

このbreakは、繰り返している処理「1つだけ」を中断して抜けることができます。

この繰り返している処理「1つだけ」というのが少しややこしいんですよね。

 

分かりやすくする為に例を出しましょう。

下のようにfor文を2つ重ねているプログラムがあったとします。

breakは2番目に出てきたforの中に書きますね。

 

for(int j = 1; j <= RECT_Y_NUM; j++){
  for(int i = 1; i <= RECT_X_NUM; i++){
    処理
    break;
  }
  
}

 

そうすると、一見、両方のfor文を中断するように思うかもしれませんが、違います。

さっきも書いたように、breakでは1つの繰り返し処理しか中断できません。

なので、今回は2番目のfor文を中断することになります。
1番目のfor文は繰り返したままです。

ふとした時に混乱しやすい内容なので、ここでしっかり理解しておきましょう。

 

for(int j = 1; j <= RECT_Y_NUM; j++){
  for(int i = 1; i <= RECT_X_NUM; i++){
    処理
    break;
  }
  ここに抜けてくる
}

 

問題:以下の四角形を繰り返し処理を使ったプログラムで書け

 

 

これで繰り返し処理の内容は完了です。

お疲れ様でした!

 

この繰り返し処理はプログラミングをする上で何度も何度も使っていく内容なので、絶対にマスターしてくださいね!

混乱してきたら、振り返ってもう一度この記事を確認してもらえばと思います。

 

それでは次の講座では、プログラムを整理するのに必要な、関数というものを扱っていきます。

この関数もめっちゃ使うものなので、また一緒に学んでいきましょう!

 ⇒第6回:関数を身に付けてラクをしよう!

 ⇒講座一覧へ戻る

 

気軽にコメントどうぞ!100%返信します。

内容を確認してから、下記の「コメントを送信する」ボタンを押してください。