if文の使い方その5
今回のC#プログラミング学習も、前回の続きで、分岐処理のif文について掘り下げていきます。
今回は少し思考を変えて、二つのプログラムを比較して、コーディング的に正しいのはどちらでしょうクイズをします。
プログラム例その1
まずはプログラム例その1から見ていきましょう。
using System; namespace Sample { internal class Program { static void Main(string[] args) { Console.Write("1から3までの数字を入力:"); int nNumber = int.Parse( Console.ReadLine() ); // 入力された値に応じて文字を表示 if (nNumber == 1) { Console.Write("One"); } else if (nNumber == 2) { Console.Write("Two"); } else if (nNumber == 3) { Console.Write("Three"); } Console.ReadLine(); } } }
プログラム例その1をダウンロードするにはここをクリックします。
ダウンロードしたZIPファイルを解凍して、「Sample.sln」を開くとVisualStudioが立ち上がってきます。
ビルドメニューから「ソリューションのビルド」を選択し、ビルドします。
ビルドが成功したらとりあえずOKです。
プログラム例その2
次はプログラム例その2を見ていきましょう。
using System; namespace Sample { internal class Program { static void Main(string[] args) { Console.Write("1から3までの数字を入力:"); int nNumber = int.Parse( Console.ReadLine() ); // 入力された値に応じて文字を表示 if (nNumber == 1) { Console.Write("One"); } if (nNumber == 2) { Console.Write("Two"); } if (nNumber == 3) { Console.Write("Three"); } Console.ReadLine(); } } }
プログラム例その2をダウンロードするにはここをクリックします。
ダウンロードしたZIPファイルを解凍して、「Sample.sln」を開くとVisualStudioが立ち上がってきます。
ビルドメニューから「ソリューションのビルド」を選択し、ビルドします。
ビルドが成功したらとりあえずOKです。
プログラムの実行
それでは、プログラムを動かしてみましょう。
今回は、プログラム例その1とプログラム例その2の実行画面は同じですので、どちらを動かしてもOKです。
F5キーを押すとプログラムが立ち上がり、「1から3までの数字を入力:」という文字列が表示されます。
まずは、「1」を入力してEnterキーを押します。
すると、「One」と表示されるので、Enterキーを押すとプログラムが終了します。
分岐処理なので、今回ももう一度、F5キーを押してプログラムを立ち上げます。
次は、「2」を入力してEnterキーを押します。
すると今度は「Two」と表示されるので、Enterキーを押してプログラムを終了させます。
最後にもう一度、F5キーを押してプログラムを立ち上げます。
今度は、「3」を入力してEnterキーを押します。
すると、「Three」と表示されるので、Enterキーを押してプログラムを終了させます。
プログラム解説
冒頭でも書きましたが、プログラム例その1とプログラム例その2では、どちらがコーディング的に正しいのでしょうか?
今回使用されているプログラムの命令や構文で、わからないものはないと思います。
なので、じっくり見比べてほしいのですが、ポイントは条件分岐部分ですね。
if文の構造的な部分だけ取り出すと、プログラム例その1では以下のようになっています。
if ( 条件式その1 ) { 条件式その1が成立したときに実行される部分 } else if ( 条件式その2 ) { 条件式その2が成立したときに実行される部分 } else if ( 条件式その3 ) { 条件式その3が成立したときに実行される部分 }
これに対して、プログラム例その2では、以下のようになっています。
if ( 条件式その1 ) { 条件式その1が成立したときに実行される部分 } if ( 条件式その2 ) { 条件式その2が成立したときに実行される部分 } if ( 条件式その3 ) { 条件式その3が成立したときに実行される部分 }
プログラム例その1では、二つ目の条件式以降で「else if」が使われているのに対し…。
プログラム例その2では、条件式の判定はすべて「if」のみを使用しています。
でも実行結果からもわかるように、どちらも同じ結果が出ます。
では、この二つの違いは何だと思いますか?
答えは、プログラム効率が全く違います。
プログラム例その1とプログラム例その2の違いは、elseが使用されているかどうかだけです。
では、elseの役割とは何でしょうか?
elseは、elseに対応している前方の条件式が成立しなかったときに、else以下を実行するという効果があります。
なので、プログラム例その1の条件分岐の流れは、まず条件式その1が評価され、成立していればそこで終了。
成立していなければ、条件式その2が評価され、もし成立していればここで終了。
成立していなければ、条件式その3が評価され、成立していればそこで終了という感じです。
これに対して、プログラム例その2では、if文が三回使われているだけなので、条件分岐が常に三つあるという扱いになります。
なので、仮に条件式その1が成立してもしなくても、条件式その2と条件式その3が常に評価されるという工程が存在することになります。
これでは能率悪いですよね。
具体的には、3が入力されたときは、どちらも同じで条件式が三回評価されますが…。
1が入力されたときは、プログラム例その1では、条件式の評価が一回だけで済むのに対し、プログラム例その2では、条件式の評価は三回行われてしまいます。
なので、コーディング的に正しいのは、プログラム例その1となります。
まとめ
C#に限らず、プログラムは書き方次第でその処理が重くも軽くもなります。