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が立ち上がってきます。

ビルドメニューから「ソリューションのビルド」を選択し、ビルドします。

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が立ち上がってきます。

ビルドメニューから「ソリューションのビルド」を選択し、ビルドします。

VisualStudioのビルド成功画面

ビルドが成功したらとりあえずOKです。

プログラムの実行

それでは、プログラムを動かしてみましょう。

今回は、プログラム例その1とプログラム例その2の実行画面は同じですので、どちらを動かしてもOKです。

F5キーを押すとプログラムが立ち上がり、「1から3までの数字を入力:」という文字列が表示されます。

プログラム実行画面

まずは、「1」を入力してEnterキーを押します。

1を入力してEnterキーを押した画面

すると、「One」と表示されるので、Enterキーを押すとプログラムが終了します。

分岐処理なので、今回ももう一度、F5キーを押してプログラムを立ち上げます。

次は、「2」を入力してEnterキーを押します。

2を入力してEnterキーを押した画面

すると今度は「Two」と表示されるので、Enterキーを押してプログラムを終了させます。

最後にもう一度、F5キーを押してプログラムを立ち上げます。

今度は、「3」を入力してEnterキーを押します。

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#に限らず、プログラムは書き方次第でその処理が重くも軽くもなります。