フローチャートとは何か?(読み方、書き方)【ゼロから始めるJavaの基礎~番外編~】

今回は『フローチャート』についてのご紹介をしていきたいと思います。

「フローチャートって何?」という感じで検索をしてみると、何やら小難しい表現の説明がたくさん出てきますが、簡単に言うと次のように表現できると思います。

『プログラムの始まりから終わりまでの処理の流れを図で示したもの』

プログラムの始まりから終わりまでという表現をしましたが、プログラムを起動してから終了するまでのすべてである必要はなく、途中の一部分だけを切り取って、その部分の始まりから終わりまでをフローチャート化することのほうが多いです

『プログラムが開始されたら、処理を一つだけ行って終了する』という、とっても簡単な処理をフローチャートにしてみると次の画像のような図になります。

角の丸いボックスと、角ばったボックスがあって、その中に文字が書かれていますね。
フローチャートではこのようにボックスの形状でどんな処理を行うのかということを表現します。

例えば角の丸いボックスは『端子』と呼ばれるボックスでフローチャートの始まりと終わりを表す際に使用します。

ボックスの中には、実際に行う処理や、条件、内容を記述します

フローチャートのメリット

フローチャートはプログラムの処理の流れを図で表したものだということは先ほどご紹介しましたが、処理の流れをわざわざ図で表す必要はあるのでしょうか?

一人でバリバリとシステムの設計からプログラミングまで完成させてしまうような凄腕のプログラマーなら必要は無いかもしれませんが、私たち一般人がプログラミングをする際には、頭の中だけでは欲しい機能を実装するための処理の流れを整理しきれなくなってしまうことがよくよくあります。

また、開発というのは一人で行われることは、個人的に行っている開発以外ではまずありません。
複数人で作業を進めるうえでは、文章や言葉ではなく図で処理の流れを説明できたほうが伝わりやすく、理解しやすいということもありますね。

開発現場によってはプログラミングを行う際の設計書となる、『詳細設計書』というものに処理の流れの参考としてフローチャートが記載されていたりします。

すぐに書けるようになる必要はありませんが、読めるくらいの理解度は現場に入る前につけておくことがお勧めです。

フローチャートで使われる記号(ボックスの種類)

さて、フローチャートがどんなものかちょっと分かってきたところで、実際に使われる記号(ボックスの種類)をご紹介していきます。

この表でご紹介したもので全てではありませんが、少し種類が多く感じますよね。

ご紹介はしましたが、フローチャートについて初めて触れる方は、『処理』、『判断』、『繰り返し』くらいが理解できていれば問題ないでしょう。
開発現場で最初に見かけるのも、この3種類を使用したフローチャートがほとんどになると思います。

分岐を行う処理の例

ここからはフローチャートで分岐を行う処理と、繰り返しを行う処理を記述した場合の例を見ていきましょう。
ここでご紹介するくらいのフローチャートは自分で作成できるようになっておくと、コーディングで悩んだ時などに頭の整理をする目的でフローチャートを使えるようになります。(ボックスの形は調べながらでも大丈夫です。)

FizzBuzzゲームのフローチャート化

今回フローチャート化するのは英語圏でパーティーなどの際に行われる『FizzBuzz』という言葉遊びです。

プログラミングスクールや書籍などでも多用されているのでご存じの方もいらっしゃるかもしれませんが、ルールを簡単に説明します。

1、2人以上で行う。
2、1人ずつ順番に1から数字を言う。(最初の人は「1!」、次の人は「2!」といった感じ)
3、自分が言う数字が3で割り切れるときは、数字の代わりに『Fizz(フィズ)』と言う。
4、自分が言う数字が5で割り切れるときは、数字の代わりに『Buzz(バズ)』と言う。
5、自分が言う数字が3でも5でも割り切れるときは、数字の代わりに『FizzBuzz(フィズバズ)』と言う
6、最初に間違えた人が負け

ルールは分かりましたか?
今回は『言う』代わりに、『表示する』という設定で、1から順番にではなく、入力された値によって表示内容を変えるプログラムという前提でフローチャート化してみます。

プログラムの開始後、ユーザーによって入力された値は、『入力値』という変数に代入されます。(フローチャートでは『値 → 変数名』という形式で代入を表現します。)

その後、『入力値が3もしくは5で割り切れるか』、『3でも5でも割り切れるか』の判断が行われて、その結果によって出力される値が変わるという流れになっています。

『3でも5でも割り切れるか』という条件の判定からスタートしているのは、仮に『3で割り切れるか』という条件の判定からスタートした場合に、『3でも5でも割り切れる数』が『3で割り切れる数』の条件で『yes』と判定されてしまい、『3でも5でも割り切れるか』の条件にたどり着けなくなってしまうからですね。

このように、条件判定の順番を誤ると、適切な判定を行うことが出来ていないプログラムが出来上がってしまいますので、注意が必要ですね。

繰り返しを行う処理の例

次は『繰り返し』を行う処理の場合にどのようなフローチャートを書くのかを見ていきましょう。

今回フローチャート化するのは以下のような処理です。

1、ユーザーから数値の入力を受け付け、変数『攻撃回数』に数値を代入する。
2、『攻撃回数』の数値の分だけ攻撃を繰り返す。(※今回は『攻撃した!』と出力するだけ…)

ユーザーが入力した数値の分だけ『攻撃した!』と表示する処理を繰り返すという単純なプログラムですね。
これをフローチャート化すると以下のようになります。

少々縦長のフローチャートになりました。
プログラム開始後にユーザーの入力値を『攻撃回数』という変数に代入した後、繰り返しの回数を保管しておくための『カウンタ変数』という変数を用意し、0を代入しています。
その後繰り返しの処理に突入し『攻撃した!』と表示した後、カウンタ変数に1を足して再度代入しています。

繰り返しの終わりを表すブロックには繰り返しの処理を再度行うかを判定するための条件式が記述されていますね。
この条件式の結果が『true』となる場合は繰り返しの開始を表すブロックに処理が移り、再度繰り返しの処理が行われます。
『false』になる場合には、そのまま次の処理へと進みますので今回の場合はこれでプログラムが終了します。

フローチャートのご紹介は、これで以上となります。
今はまだ使い方や有用性が分からなくても大丈夫です。
今後、コーディングをしている際などにプログラムの流れに悩んだり、頭が混乱してしまったときにはフローチャートの存在を思い出してください。

そして、鉛筆と紙を用意してフローチャートを書いてみましょう。
きれいな図である必要はありません。きっと頭の整理の助けになるはずですし、問題を解決に導いでくれるかもしれません。

最初は読めるようになるところから、ゆくゆくはツールとして使えるようになるといいと思います。

今回も最後までお読みいただきありがとうございました。