導入
今回から4回程度を用いて構造化プログラミングを学習します。コードの構造を整理し、
今回は構造化プログラミングの第一歩として、
展開
制御構造とは
制御構造とは、
名称 | 働き | 命令 |
---|---|---|
順次 | 上から下へ順番にコードブロックを実行する | ありません |
分岐 | 条件に応じて実行するコードブロックを選ぶ | if , switch |
反復 | 条件が成り立つ間コードブロックを繰り返し実行する | while , for |
勘違いを防止するために一言述べておくと、
これらの制御構造が考案されるまでは、goto
文など)
まずは取り組んでいる問題をしっかり分析しましょう。その次に制御構造をあてはめます。すると、
順次
順次実行構造は、
意味ごとにまとまりよくコードを書きましょう。意味が異なる、{}
でコードを囲めばコードブロックが明確になります。
流れ図で示すと次のようになります

典型的な順次実行の例として、
// Example 03-13 from "Getting Started with Processing"
// by Reas & Fry. O'Reilly / Make 2010
size(480, 120);
smooth();
strokeWeight(12);
strokeJoin(ROUND); // Round the stroke corners
rect(40, 25, 70, 70);
strokeJoin(BEVEL); // Bevel the stroke corners
rect(140, 25, 70, 70);
strokeCap(SQUARE); // Square the line endings
line(270, 25, 340, 95);
strokeCap(ROUND); // Round the line endings
line(350, 25, 420, 95);

画面の設定から描画まで、
ごく当たり前のことのようですが、
サンプルコードEx_
でもこの要点がさりげなく示されています。
- 画面の設定
- 線の太さの設定
- 線端の設定
- 図形を描く
あとはステップ3と4がリズミカルに繰り返されます。この例の仕事ではこうしか書きようがないのですが、
一度書いたコードを見直して、
Ex_
にコードを書き加えて、fill
メソッド、stroke
メソッドで設定します。詳しい使い方はリファレンスを参照しましょう。
分岐
条件に従って実行するコードブロックを切り替える仕組みは大変便利です。図5.if
文の流れ図です。論理式が成り立つ場合、
if
文の流れ図
基本的に、
この制御構造が連続する場合、Greeks.
のようにswitch
文が便利です。
Greeks.
をif
文で書き直しましょう。
Greeks.pde
char aChar = 'b';
switch(aChar) {
case 'a':
case 'A':
println("Alpha");
break;
case 'b':
case 'B':
println("Beta");
break;
case 'c':
case 'C':
println("Gamma");
default:
println("No match!");
break;
}
switch
文の構造を多重分岐と呼びます。switch
文は便利ですが、Greeks.
はaChar
にa
やb
などが代入されていれば正しく動作するのですが、c
やC
が代入されたときには正しく動かないのです。break
文が抜けているからです。
break
文を上手に几帳面に使用しないとswitch
文はたちまちおかしくなってしまいます。この仕組みを上手く利用することもできますが、if
文を上手に使うことをお勧めします。
Greeks.
をif
文を使って、
反復
同じような仕事を繰り返すことがあります。コンピュータは、
図5.while
文の流れ図です。
while
文の流れ図
while
文による繰り返し構造の流れ図は次のように読みます。
- 論理式
(条件式とも呼びます) が成り立てば、 すぐ下のコードブロックへ実行が移ります。 - コードブロックの実行が終わると、
論理式の直前に実行が戻ります。 - 論理式が成り立つ限り、
コードブロックを繰り返し実行します。 - 論理式が成り立たない場合、
実行は右側へ移り、 コードブロックを実行せず while
文の構造を終了します。
for
文の流れ図は、while
文の応用です。
- 初期条件を設定します。
- 次に条件が成り立つか確認する論理式を置きます。
- この論理式が成り立てば、
続くコードブロックを実行します。 - 論理式が成り立たなければ、
コードブロックも条件の更新も飛び越し、 for
文の構造を終了します。 - コードブロックの実行が終了したら、
条件の更新を行います。 - 論理式の直前、
初期条件設定の直後へ実行を戻します。
プログラミングの入門書で学習しただけの方は、while
文を知らないかも知れません。while
文の形はfor
文でも書けるので、while
文を紹介しないこともあるからです。問題をよく分析して、
演習ではfor
文の流れ図を描いてみましょう。
Sigma10.
を書きましょう。while
, for
それぞれの構文を使って書いてください。どちらがより分かりやすく問題を記述できるでしょうか。
演習
演習1(難易度:middle)
キーボードから入力されたアルファベットによって動作するようにGreeks.
を作り直してください。作成にあたっては、GreeksWithKey.
とします。
演習2(難易度:middle)
for
文の流れ図を描いてください。
演習3(難易度:middle)
1+2+3+...と数を合計していき、while
, for
それぞれの構文を使って書いてください。sketch名はSumTil10.
とします。
まとめ
- 制御構造の種類と仕組み、
使い方を学習しました。
学習の確認
それぞれの項目で、
- 3種類の制御構造を理解できましたか?
- 理解できた。十分に使えるようになった。
- 理解できた。しかし、演習問題が自力で解けなかった。
- 理解できない。
参考文献
- 『Javaルールブック ~読みやすく効率的なコードの原則』
(電通国際情報サービス 監修、 大谷晋平、 米林正明、 片山暁雄、 横田健彦 著、 技術評論社) - Javaのコードを書く人は必携。ほぼ見開きでコンパクトながら意を尽くした解説がある。
- 『Java言語プログラミングレッスン 第3版
(上)』(結城浩 著、 SBクリエイティブ) - Java言語の入門書として最高の一冊。
演習解答
GreeksWithKey.
pde for
文の流れ図for
文の場合に軍配でしょうか。微妙な差です。SumTil10.
pde