第18回
条件式と演算子~制御構造をさらに理解する

制御構造についてもう一度

変数の値によって続く処理を切り替える制御構造こそが、プログラムの柔軟性を支えています。これまでに何度も説明してきたことですが、ここでもう一度制御構造と条件式について考えてみようと思います。

またまた制御構造?!

多くのプログラミングの入門書を見ると、制御構造について確かに基本的なことはちゃんと述べられているのですが、それは言語仕様や文法をきちんと示している、ということであって、制御構造の重要性についてはあまり説明されていないように感じます。

そういった入門書を批判する意図はありません。僕も同じような本を書いてきました。プログラミングの入門段階であまり実用的な部分に触れると、かえって読者を惑わせてしまうことがあります。

問題は、入門書をマスターした次の段階です。実用レベルの、いわゆる『応用問題』的なところへ進むと、いきなり具体的な処理がテーマとなってしまいます。入門と実務との間を埋める部分──現実の処理をどのようにしてソースコードに置き換えていくか──を学ぶ機会が少ないのです。

現実の問題とソースコード

さて、確かに
ifは条件が真のときに続く構文を
     偽のときにはelseに続く構文を
実行する。
といった説明を理解できれば、if文を使うことはできるようになるでしょう。しかし、重要なことは『ifに与える条件の立て方』です。

現実の問題をプログラムのソースコードとして記述するには、
どのような状態のときに〈処理a〉を実行し、
のような状態でないときに〈処理b〉を実行するのか?
という論理を頭の中に描き、それに従った条件を設定できなければなりません。この論理的な処理の流れをif文として書き上げることができなければ、現実の問題を解決するプログラムは作れません。

文法より応用力を

プログラミングの解説書を読み、サンプルのソースを入力して作ったプログラムは動くのに、いざオリジナルのプログラムを作ろうとしたら、途中で挫折してしまった……という話はよく耳にします。

Visual Basicなど、視覚的・感覚的に処理を組み上げていくことのできる統合開発環境では、サンプルを改造するなど見よう見まねである程度『ちゃんと動くプログラム』が作れてしまいます。しかしそれは『作れてしまう』レベルでしかありません。

プログラミングとは、要するに現実の問題──高度な数学の計算かもしれないし、在庫の管理かもしれません──をコンピュータで扱えるレベルに置き換えることです。そのためには、制御構造をしっかり押さえておく必要があります。『現実』は状況によって変化し、その変化の仕方はほとんどの場合に式として法則化できるからです。

ifやforの文法を覚えることももちろん大切です。しかし、文法は言語によって異なるため、あまり厳密に、固定的に頭に入れる必要はありません。忘れたら書籍やヘルプで確認できます。それ以上に、どのような状況のときにそれらをどのように用いれば、現実の問題を解決できるか──という応用力を身に付けることがとても大切です。