プログラムを書く時の基本的な考え方(8):構造化プログラミング(その2)

前の記事からの続きです。

③プログラムは3つの制御構造で書ける

 第二の要素はプログラムは次の3つの構造で作ることができる、ということです。

1.  連接(逐次)
2.  選択(条件判断、条件分岐)
3.  反復(ループ、繰り返し)

 いろいろな学習書・教科書に書いてあるので、ここでは省略しますが、数学的に証明されているらしい。実際、わたしもそうやってプログラム書いてました。

 プログラムを書き始めた頃は、処理の制御(処理を別のところに飛ばす)の必要があると、GOTO文というのを使っていたのです。わたしが最初に覚えたプログラミング言語がBASIC(Beginners' All-purpose Symbolic Instruction Code)だったので、すぐに覚えたのがGOTO文です。
④GOTO文は便利だが、使わない

 何かの条件でプログラムの制御をすぐ次の文(次に書いてある処理)でなくて、他のところに持って行きたい時がある。そういう時に、

  IF  条件なんたらかんたら・・・ GOTO  何行目

みたいに書くのです。BASICはそれぞれの文(Statementという単位)ごとに処理が実行されるので、文ごとに行番号(ナンバー)が書いてある。というか、自分で書くのですが。上の文も実は正確には、

  10   IF  条件なんたらかんたら・・・GOTO  何行目

みたいに文の先頭に行番号(ここでは10としました)が付いている。全ての行に番号(常識的に考えれば分かりますが、昇順に並んでます)がついているので、GOTO でその行番号を示せば、そこに制御(次の処理)が移ります。GOTOの飛ばし先は前でも後ろでも大丈夫。

 10行目から100行目に飛ぶ

もありだし、

 100行目から50行目に飛ぶ(戻る)

もできます。これが100行目から5行目に飛ぶ・・・だったりすると、順番に処理していった結果、再度10行目を処理するということもありえます。

・・・というようなことを、BASICを含め、原初のプログラミング言語たちでは、みんなやっていた。原初のプログラミング言語とは、とりあえず、アセンブラ、FORTRAN、COBOL、BASICだと思ってください。昔、よく使われていたプログラミング言語です。実は他にもありますが、主たるものはこれら4つです。

 それで、このGOTO文(GOTO制御)は「害悪」だと言われた・・・(苦笑)

 確かにね、害悪にもなりますね。制御が複雑に絡みあうことを許しちゃうから。絡み合った状態を「スパゲッティ(スパゲッティ状態)」と言ってますね。色々な教科書に出てくるから、皆さん、ご存知ですね。スパゲッティはいかんと。美味しいのになぁスパゲッティ。

⑤アセンブラではGOTOするしかない

 それでも、アセンブラだと制御方式は基本的にそれしかないから(・・・マクロアセンブラとかは多少なんとかできるかと思いますが、まあここでは無視してください。)アセンブラ使いのプログラマはGOTOがどうしていかんのだと言いたくなりますよね、おそらく(苦笑)。

 繰り返しますが、確かによろしくはない。分かりにくくなりがちだからね。分かるように書けばいいのだ・・・という昔堅気のプログラマもいたりするのですが、わたしも崇め奉っている、かの有名な(皆さん、知らんかもしれんけど)カーニハン大先生とか、プローガー大先生とか、リッチー大先生とかが、GOTOは使うな・・・と言うもんだから、GOTO文を使うことを止めたのです。だって、この人たち、わたしの時代のプログラマからすれば神だもの、神のおっしゃることは聞かないといけない。

 だんだん、話が雑談めいて来ましたので、改めて姿勢を正して話しますと、そういう訳でGOTO文を使わないプログラムが分かりやすくて良いと。GOTO使わないならどうすれば良いのか・・・という答えが前述した3つの制御構造です。それでプログラムは全部書けちゃうのだよと、大先生たちがおっしゃるので、世界中のプログラムからGOTO文が消えました。実はあるケースでは、あえてGOTO文を使っても良いよ・・・ともおっしゃっているので、そこだけ使うことはしたという事実はあります。ここでは詳細は省きますが。

 GOTO文を使わないで3つの制御構造でプログラムを書く。そうすれば自ずとプログラムは分かりやすくなり、メンテナンスもしやすくなり、構造化しやすくなるのだ。これはその通りで、GOTO文でどこか遠くに制御が飛んでしまうようなプログラムは「部品化」できません。

 プログラムを書くときに前に似たようなの書いたよな、と思い出すことがあります。それでそのプログラムを引っ張り出してエディタでじっと見る。ああ、ここが使える・・・と思ってそこをコピペするのです。
 でもね、GOTO文で制御があっちこっちいってると、これは尋常じゃない。大丈夫かな、ここ切り取ってコピペして・・・という疑問というか不安がいっぱいです。だからGOTO文を使わなくなりました。GOTO文があるとプログラムを「部品」として扱うのが難しくなるのです。

 以上、構造化プログラミングはこの2つの要素からなるプログラミング理論です。

 構造化プログラミングの目指すところは、「生産性の向上」です。「プログラミングの効率化」と言ってもいい。そのために構造化プログラミングするのです。ここが大事。あとでまた言います。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次