手続き型プログラミング
処理を命令や手順の並びとして記述し、条件分岐や繰り返しによって状態を変化させる考え方。
概要
手続き型プログラミングは、コンピュータに実行させる処理を、具体的な手順の並びとして記述する考え方です。
変数へ値を代入し、条件分岐や繰り返しを使いながら、上から順に処理を進めます。JavaやPythonでメソッドや関数の中を書くときにも、手続き型の考え方は日常的に使われています。
例
注文金額の合計を求め、一定額以上なら送料を無料にする処理を考えます。
int total = 0;
for (OrderItem item : items) {
total += item.getPrice() * item.getQuantity();
}
int shippingFee = 500;
if (total >= 5000) {
shippingFee = 0;
}
int amountToPay = total + shippingFee;
値を初期化し、繰り返し、条件分岐、代入という順番で状態を変えています。
メリット
- 実行順序が明確で、小さな処理を追いやすい
- CPUが行う処理に近く、動作を具体的に考えやすい
- 条件分岐や繰り返しを直接表現できる
- 小規模なスクリプト、バッチ、アルゴリズムを素直に書ける
- 多くの言語で利用できる
デメリット
- 共有する可変状態が増えると、どこで値が変わったか追いにくい
- 処理が長くなると、手順全体を読まないと意図を理解できない
- 業務ルールと入出力処理が一つの関数へ混ざりやすい
- 処理の再利用や変更の局所化が難しくなる場合がある
- 並行処理では、状態変更の競合を考える必要がある
向いている場面
- 入力から出力までの短い処理
- バッチやデータ加工
- 処理順序そのものが重要なアルゴリズム
- シェルスクリプトや運用ツール
- オブジェクト指向システム内の小さなメソッド
手続き型は古い、オブジェクト指向は新しい、という関係ではありません。オブジェクト指向のコードでも、各メソッドの内部では手続き型の処理を使います。
読むときの観点
- どの変数が途中で変更されるか
- 条件分岐の組み合わせに漏れがないか
- ループの終了条件が正しいか
- 一つの関数が複数の目的を持っていないか
- 入出力やDB更新などの副作用がどこにあるか
更新履歴
- 初版作成