構造化プログラミング
構造化プログラミングとは、情報処理業界におけるムーブメントのひとつであり、プログラミング・スタイルのひとつでもある。
「問題構造・制禦構造・データ構造」を踏まえてソースコード反映させ、見通しとコードの可読性を向上させようという目標がある。
重要視される要素としては、
- 変数の静的な型付け
- 変数スコープ
- 制禦構造
がある。
概要[編集]
制禦構造においては、
- 呼出しと戻し
- 条件分岐
- ループ
を基本構造とする。すなわち、ノイマン型のアーキテクチャとシングルタスクを念頭に置いている。並列処理などが入ってくると構造化もクソもないので、現代のネットワーク環境では「構造化プログラミング」は「老人語」となりつつある。
理論[編集]
変数の静的な型付け[編集]
教育用のプログラミング言語であるPascalでは、型宣言をしていない変数を使用してはいけなかった。したがって明示的に示される。 Java では「プリミティブ」と呼称される IEEE 規格に則って、int, long, real. double は基本的な型として用いられた。
変数スコープ[編集]
「この変数名はどの範囲で有効か?」を明示的に示すことである。とはいえシステム記述言語だとそんなことも言ってはいられないし、アセンブラとなると同じ「バイト列」なので、C言語ではあっちのファイルとこっちのファイルで型が違っているのは普通であり、グローバル変数となると混乱の原因となる。Java ではグローバル変数はシングルトン実装をすることが推奨される。
制禦構造[編集]
大きく分けて
- 関数呼びと値戻し
- 条件分岐
- ループ
- 大域脱出
の四種がある。
FORTRAN 60 からの反省を踏まえ、「GOTO文は排除せよ」というところから、「行番号とジャンプ命令は、(プログラミング言語としての)高級言語にはなじまない」という意見から、「goto の排除」が行われた。実際に、Javaにgoto ステートメントはない。
関数呼び(coll)と値戻しには、「番地呼び」「値呼び」のほか「名前呼び」がある。
条件分岐はif文とcase文がある。if 文には else が追加された。
ループとしては while 文、do 文、for 文がある。これらはLOOP - UNTIL - DO - REPAT 文のバリエーションであるが、実務においてはbreakを使えばだいたいなんとかなる。なお、FORTRAN 60では、「FOR 文から GOTO 文で抜けたときには、ループ変数の値は保証されない」という仕様になっていたため、その反省もある。
大域脱出(catch & throw)は「例外を投げる」と呼出し大元でキャッチされる。ネットスラングの「ぬるぽ」はここに由来する。よって、ぬるぽが投げられるような粗雑なコードを書いたプログラマは、必ず「ガッ(本来は半角カタカナ)」されねばならない。FORTRAN 60 とほぼ同時代に実装された LISP 1.5 では使われていた。