第7回
制御構造と変数(3)~switch caseによる多枝分岐

ifとswitch caseの使い分け

前回と今回で2つの条件判定と分岐の構造を紹介してきました。それぞれの特徴を理解して、うまく使い分けることが大切です。

基本はif

ある条件を調べて処理を切り替えるには、ifとswitch caseの2つの方法があります。条件判定と分岐の基本はifです。switch caseは1つの値を順次比較して比較元と比較先が『等しい』ときだけ処理の流れを切り替える──という形で、ifの構造を単純化した変形と捉えればいいでしょう。

今回の例のように1つの変数の値を順次調べていく場合、ifでは処理の構造が分かりにくくなることがあります。サンプルで紹介したように、if文では必ず条件式を伴うため、比較したい1つの変数を比較する都度(ifに続く条件式が異なるごとに)記述しなければならないからです。

処理構造に適した構文を

たくさんの比較先から1つの値と等しい1つだけを見付けたい場合、switch caseの方が遙かに有効です。switch caseを使った──ソース上で“switch”というキーワードを見た時点で、『1つの変数を順次比較している』という構造だとすぐに理解できるからです。

ただ、先述したようにCのswitch caseには、VBのSelect Caseような便利な機能が備わっておらず、単純に比較元の値と等しいかどうかだけを判断することや、caseで値が一致してもbreak命令がなければそれ以降のcaseもすべて処理してしまうことなど、VBに慣れていると勘違いして思わぬミスを引き起こす可能性もあります。

この点に注意しつつ、switch caseを使いこなしてください。

あとがき

hiropの『ちょっと気になる専門用語』~《文字列》

今回の例では、全角のひらがなを表示するためにchar型配列を用いました。プログラミングでは、このような形態のデータを『文字列』と呼びます。

文字は1文字で1つのデータであり、それが複数(0個以上)並んでいるため、このような名称で呼ばれている訳です。英語では“String”(原義は「ひも状のもの/ひもに通した数珠状のもの」)ですが、これを「文字の並んだ列」と訳したのはうまい表現だと思います。

しかし、パソコンが一般に広く浸透した現在、普通の(プログラミングには縁のない)ユーザー向けの書籍や雑誌記事にも『文字列』という言葉が平気で使われるようになり、僕は「?!」と思ったのです。

コンピュータの扱うデータをただの数値、単なる記号と捉えても構わないプログラミングの世界では、「へてけ%A$※▲」などと意味なく並んだ記号も「こんにちは」という意味のある文字の並びも、一律に文字列という名前で括って構わないでしょう。

しかし、一般のユーザーにとって両者はまったく異なる存在です。これを『どちらも文字の並んだものだから』という技術的な理由で『文字列』とひとからげに表現することは、どうもしっくりきません。

人間が読んで意味を受け取れる文字列は『コトバ』とか『文章』と言います。しかし、コンピュータは(人工知能でない限り)文字列の示す『意味』を解釈しません。そんな無機的な世界の用語である『文字列』を、人間の世界にすんなり受け容れてしまってよいものかどうか、迷いがあります。

こんなことにこだわっているのは、僕だけなんでしょうか?

【補足】サンプルソースとプログラムについて

今回のプログラムもこれまでと同じように内部の処理はシンプルなのですが、ifとswitch caseの違いを比べるための補助として、掲載したサンプルのソースとそれをコンパイルして生成した実行形式(DOSの.exe形式)ファイルを用意しました。

.exeファイルは、Windows XPでは「スタート」→「プログラム」→「アクセサリ」の「コマンドプロンプト」から実行できます。

拡張子.cのソースファイルは、LSI-C 86でコンパイルできる形式です。Visual C++とはヘッダファイルとmain関数の定義行が異なるので注意してください。

これらは、あくまでコラム記事の参考として提供するものであり、完全な動作を保証するものではありません。ウィルスチェックは入念に施してありますが、運用の結果生じる損害について筆者およびグレープシティ(株)はその責を負いかねますので、ご了承ください。