プログラムは分岐と分岐以外の2種類で構成されている | それゆけ西表島

プログラムは分岐と分岐以外の2種類で構成されている

プログラムを勉強する時に、まず最初に行うのが「Hello World」を画面に表示することである。そしてその次に、データの種類、演算子、制御について覚えることになる。あまりに最初に出てくるので無意識的に使っていることが多いと思うが、プログラムは次に進むか、分岐するかのどちらかしかない。例外処理も分岐の1つだ。

一般的に、分岐が多くなればなるほど複雑になるといえるだろう。逆に言うと、分岐以外の部分は経路が1本なので複雑になりようがないのである。スパゲティコードと呼ばれるものは、分岐に分岐が積み重なって、流れが判断できなくなるところに問題がある。分岐と分岐以外を明確に分離したら、プログラムの構造が作る人にも見る人にもわかりやすいのではないか。

 

初心者がプログラムを学ぶ時に難しいと思われることの1つに、複雑になった1つのメソッドを複数のメソッドに分割する方法があまり明確でないということがあげられる。

 

共通なメソッドを切り出すのはわかりやすいが、それ以外にもただ単純に長いから分割せよと言われてもどこで分割していいのかよくわからない。そこで明確な方針として、分岐と分岐以外に分離するというのはどうだろうか。分岐用のメソッドは分岐ロジックだけに思考を集中できるので、少々冗長になるかもしれないが、バグの温床となるのを防ぐ事ができるだろう。

 

また、分岐は全て管理すべきものである。ラクだからという理由でコーディングの段階で勝手に分岐を増やすということは本来ありえない話なのだが、同じメソッドでいろいろなことを処理させようとすると、勝手に分岐が増えていく。そうならないためにも、分岐と分岐以外を明確に分離したほうがよいと思われる。

 

APIだライブラリだという前に、プログラムの構造はどうすれば必要以上に複雑にならないか、ということを考えないといけない。分割統治も分割の仕方を間違えたら意味が無いということだ。どんな高度な言語でも、考え方次第で複雑にもなるし簡単にもなる。MDAだから簡単になるとかは脳みそ思考停止状態である。キーワード1つで複雑さが解消できるわけではないのだから。

 

※ 以前に書いた「IF文を極力減らすと見晴らしのいいプログラムになる」も、この記事の内容と重複している部分がありますので、興味がある方はどうぞ。