構造化プログラミング*1とは、コードの書き方のことです。
プログラムの基本構文は分かるが、どのようにコードに落とし込んだら良いのか悩んでいる方がいましたら、本記事を参考にしてみてください。プログラムの書き方のヒントになれば幸いです。
今回は、構造化プログラミングの概要について書きます。ついでに構造化プログラミング以前のコードの書き方についても少しだけ触れておきます。ソフトウェア開発の歴史のお話です。
構造化プログラミングの3つの制御構造
構造化プログラミングでは、コードを3つの制御構造に整理します。つまり、どんなプログラムも3つの制御構造で表現できるということです。これは数学的にも言われているそうです。
3つの制御構造は、以下のとおりです。
- 順次(逐次)
- 上から順に処理する
- 上からコードを書くと順次処理になるので、難しく考えなくて良い
- 分岐:if文,swithc文
- 条件を満たすかどうかで、その先の処理が枝分かれする
- 反復:for文,while文
- 条件が満たされる間、同じ処理を繰り返す
それぞれの処理のイメージは、以下のようになります。
この3つの制御構造に当てはまるようにコードを書いてきます。ウェブサービスもゲームも企業のシステムもこの3つの制御構造の組み合わせでできていると言って良いでしょう。
順次
順次は、記述された順に上から処理を実行することです。上からコードを記述していけば、順次構造の書き方になります。サンプルコードはありません。
分岐
ifやif/else、if/else if/elseを使った書き方です。
分岐のサンプルコードは、以下の記事を参照してください。
反復
forやwhileを使った書き方です。
反復のサンプルコードは、以下の記事を参照してください。
構造化プログラミング以前のコードの書き方
今では当たり前に順次、分岐、反復の処理を使ってコードを書いていると思います。しかし、過去には無条件分岐文(goto文)でコードを書いていた時期があったそうです。
goto文:無条件分岐文
構造化プログラミング以前のコードでは、goto文がメインでした。goto文のコードのイメージは、以下のとおりです。
goto ラベル名; ラベル名: //処理
goto ラベル名;
で、ラベル名のところに処理が移動します。goto文を使うと処理をどこにでも飛ばせます。便利ですが、多用すると処理の流れが複雑になりデメリットにもなります。
goto文の特徴は以下のとおりです。
- ラベルの場所に処理を飛ばす(ジャンプする)
- 処理が行ったり来たりする
- 処理を追うのが難しい
コード量が増えるとgoto文では処理の流れを把握するのが難しくなります。そんな中、構造化プログラミングを唱える人物が出てきます。ソフトウェア工学の研究家のCorrado Böhm(コラド・ベーム)とソフトウェア工学の分野で有名なEdsger Dijkstra(エズガー・ダイクストラ)です。彼らの意見はすぐに受け入れられませんでしたが、「無条件分岐文」と「構造化プログラミング」の折衷案で「構造化プログラミングの定義」に決着がつきました。そのことについては話が長くなるので、他のサイト*2に譲ります。
まとめ
構造化プログラミングの概要について書きました。順次、分岐、反復のいずれかになるようにプログラムを書くことが、構造化プログラミングです。現在、プログラミングの勉強をされている方は、すでに構造化プログラミングの考えでコードを書いています。何故なら構造化プログラミングに準拠している言語でプログラムの勉強をしているはずだからです。
コードの構成は、順次、分岐、反復の3つだけです。どんなにすごいプログラムもこの3つの組み合わせでできていると分かれば、プログラミングのハードルが下がったのではないでしょうか。
構造化プログラミングの概要が分かったからといって、プログラムを書けるわけではありません。コードが書けるようになるには、実際に書いて動かすことが必要です。反復練習してください。