最終更新日時:2019.08.25 16:56:53

手続き型プログラムの基本 - 逐次処理・条件分岐・繰り返し

はしがき

プログラムは機械語で実行されるコンピュータへの命令のまとまりですが、それだけだと理解が難しいので、色々整理する方法があります。
今回は手続き型言語と呼ばれる最もポピュラーなプログラミング手法において使われている基本的なプログラムの構造をまとめます。

プログラムがどんな構造になっているかという分類法が大昔に作られましたが、それは今でもある程度そのまま使えます。
大別すると次の3つになります

  • 逐次処理
  • 条件分岐
  • 繰り返し

プログラムの動作順序のことをアルゴリズムと言いますが、全てのアルゴリズムは上の3つのパターンの組合せだという考え方です。
実は他にもあって、

  • ジャンプ

しかしこれは特別な場合を除いて使わない方が良いとされています。

この基本的な考え方で作られたプログラミング方法は「構造化プログラミング」と呼ばれたりします。
構造化プログラミングをするために作られたプログラミング言語は非常に多く、ほとんどの言語があてはまりますが、代表的なものは次の言語になります。

  • C言語
  • Algol
  • Ada
  • Pascal
  • 改良されたBASIC系言語

ほとんど古い言語であり、今でも使われ続けているのはほぼC言語だけになりますね。
とは言え、JavaやJavaScriptのような別の考え方で作られた言語でも上の3大構造を基本として踏襲しています。

逐次処理

逐次処理のイメージ

逐次処理にはだいたい次のような種類があります。

変数への値の代入

変数というのはコンピュータのメモリに値を保存する領域に名前を付けたものです。この領域は1バイトとか4バイトなどと大きさが決まっていて、代入という命令によって値を保存することができます。
この命令をするためのステップが逐次処理の一種になります。

a <- 1                 ← aという変数に1という値を代入している
サブルーチン (関数) 呼び出し

サブルーチンや関数の呼び出しも逐次処理の一種です。これは引数をメモリのスタック領域に保存してプログラム内の関数のあるところに処理がジャンプし、処理が終わって戻り値がある場合はそれをまたスタック領域に保存して呼び出した所に戻ってくる処理です。

subroutine(1, 2, 3)    ← subroutineというサブルーチンを呼び出している
サブルーチン (関数) 呼び出し元へ戻る

プログラムを関数によって分割する場合、呼び出した処理はほとんどの場合呼び出し元に戻りますので、その戻るという処理も逐次処理の1つになると思います。
呼び出したサブルーチン・関数から全て戻って来てこれ以上呼び出し元が無い場合に戻る処理をするとはプログラム終了となります。

return 1               ← 1という値を呼び出し元に返している

条件分岐

条件処理のイメージ

条件分岐はプログラムの処理の途中で必要な条件を満たした場合にのみ実行する処理、あるいは実行しない処理で分岐することです。分岐した処理は後で合流しないといけません。
関数の中で分岐する場合、関数の中で合流する場合と呼び出し側で合流する場合があります。それはプログラムの仕様に従っていればどちらでも良いことです。

if a = 1               ← aの値が1と等しいという条件
then
    a <- 2             ← 条件に一致する場合の処理
else
    a <- 0             ← 条件に一致しない場合の処理
endif
                       ← 条件分岐が終わったところで合流する

繰り返し

繰り返しのイメージ

繰り返しはプログラムのある命令から別のある命令までの処理を、その時の目的を達成するまで繰り返す構造です。

ループ変数の設定

ループ変数とは繰り返しの1回ごとに処理の対象となる変数のことです。これがない繰り返し処理もあります。

for i in 1..10         ← iというループ変数
do
    print(i)           ← 繰り返し処理ではループ変数iに1から10までの値が順次代入される
next
終了条件の設定

終了条件とは、繰り返しを終了してもよいと判断する条件です。
ある変数の値が0になること、ある値になること、もしくはそれ以外になることなどがあります。
これがないと無限ループとなり、強制終了するしかなくなります。もちろん、意図してそのようにする場合もあります。

while a < 10           ← 変数aの値が10未満であるという条件で繰り返す
do
    a <- random()      ← 繰り返し処理
end
                       ← この場合終了条件は変数aの値が10以上となった場合になる

ジャンプ

ジャンプのイメージ

ジャンプはプログラムの好きなところにジャンプして処理を続行することです。構造化されたジャンプとそうでないジャンプがあり、後者の方は使わない方が良いとされています。goto命令がその代表となります。
逆に構造化されたジャンプというものは言語の機能として特別にサポートしている場合が多いです。C言語のbreak命令やcontinue命令がその例です。

goto label1            ← label1というラベルのある行に処理が移動して続行する

評価・コメントをお残しください...

いいね・よくないねボタンについて: このボタンはあなたの個人情報を一切記録しません。24時間ごとに「いいね」か「よくないね」のどちらか1点まで押せます。2回同じボタンを押すと±0になります。安心して連打してください。

コメント:

おなまえ:

メール:

コメントはまだありません。