制御構造の補足

中間試験対策の一夜漬けにご利用ください.


反復と分岐の間の関係

制御構造を
適切に使い分けた
記述パターン
左と動作は同じだが
無駄に goto を使用(乱用)した
記述パターン
前判定反復
while (継続条件) {	
	...
}
開始位置:
	if (継続条件) {
		...
		goto 開始位置;	
	}
後判定反復
do {
	...
} while (継続条件);	
開始位置:
	...
	if (継続条件) goto 開始位置;	
中判定反復
while (1) {
	処理A;
	if (継続条件) continue;
	if (終了条件) break;
	処理B;
}
処理C;

// do-while でも同
開始位置:
	処理A;
	if (継続条件) goto 開始位置;	
	if (終了条件) goto 終了位置;
	処理B;
	goto 開始位置;
終了位置:
	処理C;
おー,if-goto は万能では? しかし,これは「ノコギリだけで何でも作れる」と云っているようなもの. 作れるけど手間も時間もかかりすぎるので, 現代の大工は,他にも様々な道具や電動工具だって活用しますよね? 同様に,プログラマは複数の制御構造を適切に使い分けるんです.

for と while の間の関係

計数反復の適切な記述パターン 左と動作は同じだが
条件反復による記述パターン
for (i = 0; i < 10; i++) {	
	...
}

// 計数反復の基本要素
// (初期化・反復条件・カウント)が
// 1箇所に集約されている.
i = 0;
while (i < 10) {	
	...
	i++;
}

// 基本要素が3箇所に散乱...
// ブロックが長くなると,間違いやすい.
// (i++ せずに continue してしまうとか...)
反復制御の進化論:if-goto(機械語にも存在)→ while → for
制御構造の使い分けに関する参考文献: 構造化プログラミングの苦難の歴史