C#プログラムの条件分岐(if文)

今回のC#プログラミング学習は、条件分岐を学びます。

条件分岐というのはある条件によって、プログラムの動きを変化させる手法のことです。

今までは順次処理と言って、どんな条件でプログラムを動かしても常に同じ処理が行われていましたが、今回学習する条件分岐を使えば、プログラマーが設定した条件によりプログラムの動きを変化させることができるようになります。

この条件分岐という考え方は、C#に限らずいろいろなプログラミング言語で使われているので、ここでしっかり学習しておきましょう。

プログラムのダウンロード

まずは今回学習していくためのプログラムをダウンロードしましょう。

ここをクリックして「Sample.zip」ファイルをダウンロードしてください。

ZIP形式になっているので、ダウンロードしたら、マウスの右クリックで「すべて解凍」を選びます。

すると、Sampleプロジェクトが展開されます。

プログラムファイルを開く

Sampleプロジェクトの中に「Sample.sln」ファイルがあるので、このファイルを開くとVisualStudioのVisualC#が立ち上がります。

ソリューションエクスプローラから「Program.cs」を開くと、以下のようなプログラムが表示されます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("整数値を入力:");
            int iNumber = int.Parse( Console.ReadLine() );

            // 入力された値を調べる
            if (iNumber == 0)
            {
                Console.Write("ゼロが入力されました");
            }
            else if (iNumber > 0)
            {
                Console.Write("正の数が入力されました");
            }
            else if (iNumber < 0)
            {
                Console.Write("負の数が入力されました");
            }
            else
            {
                Console.Write("入力値を特定できませんでした");
            }

            Console.ReadLine();
        }
    }
}

プログラムのビルド

F7キーを押すとプログラムのビルドが行われ、実行ファイルが作成されます。


VisualC#でビルドした様子

プログラムの実行

F5キーを押すとプログラムが実行されます。

まずは「整数値を入力:」と表示されるので、「15」などの数値を入力しEnterキーを押します。

すると入力した値に応じたメッセージが表示されます。


プログラムを実行した様子

例えば、「15」と入力しEnterキーを押すと、「正の数が入力されました」と表示されるのでEnterキーを押すとプログラムが終了します。

プログラム解説

それでは今回学習するC#プログラムを見てみましょう。

条件分岐

条件分岐とは、その時の条件によってプログラムの動きを変化させる手法のことです。

分かりやすいところでは、信号でしょうか。

信号が青の時は進めで、赤の時は止まりますよね。

これが条件分岐です。

C#プログラミングでは、この条件分岐の手法が大きく分けて2つあります。

そのひとつが今回登場しているif文です。

プログラムの流れ

上記のプログラムが実行されると、まずは「整数値を入力:」と表示されます。

ユーザーが何らかの数値を入力しEnterキーを押すと、入力された数値に応じたメッセージが表示されます。

今回の学習ポイントは、入力された数値の受け取り方法と、条件分岐のif文です。

入力数値の受け取り

プログラム側で入力された値を受け取るには、受け取るデータによってその方法を変える必要があります。

以前作った「入力した名前を表示させるプログラム」のように、直接「=」で代入できれば楽なんですが、実は数値の場合はそうはいかないんです。

ではサンプルプログラムではどうやっているのかというと、以下のようになっています。

int iNumber = int.Parse( Console.ReadLine() );

基本的には「Console.ReadLine()」で入力を受け付けるんですが、全体を「int.Parse」という命令でくくることにより、入力された値をint型の変数「iNumber」でも扱える数値にしています。

if文

いよいよ今回の学習の山、条件分岐のif文を見ていきましょう。

サンプルプログラムでは、以下の部分です。

// 入力された値を調べる
if (iNumber == 0)
{
    Console.Write("ゼロが入力されました");
}
else if (iNumber > 0)
{
    Console.Write("正の数が入力されました");
}
else if (iNumber < 0)
{
    Console.Write("負の数が入力されました");
}
else
{
    Console.Write("入力値を特定できませんでした");
}

if文の基本構造としては、ifの後のカッコ内に条件式を書き、その式が成立しているのであれば「{」から「}」に囲まれている部分が実行されるという感じです。

今回のプログラムであれば、変数「iNumber」に格納されている値について条件分岐が行われていることが分かると思います。

まずは「if (iNumber == 0)」なので条件式は「iNumber == 0」です。

条件式が成立したときに表示される文字列を見れば、何をしているのかわかりますよね。

この条件式の「==」というのは、左辺の変数「iNumber」と右辺の「0」が等しいことを表しています。

なので変数「iNumber」が0だったときは条件式が成立し、「{」と「}」の中に書かれている「Console.Write("ゼロが入力されました");」が実行されます。

そしてその後はif文を抜けるので、最後の「Console.ReadLine();」まで行きEnterキーの入力待ちになるわけです。

もしこの条件式が成立しなかった場合は、「else」以降に書かれている次のif文の条件式が成立するかどうかの評価が行われます。

次の条件式は「iNumber > 0」です。

これは変数「iNumber」が「0」より大きいときに成立し、もしこの条件式が成立していれば「Console.Write("正の数が入力されました");」が実行されます。

そしてその後はif文を抜けます。

もしこの条件式が不成立の場合には、次の「else」以降に書かれているif文の条件式の評価が行われます。

次の条件式は「iNumber < 0」なので、変数「iNumber」が「0」より小さいときです。

条件式が成立していれば「Console.Write("負の数が入力されました");」が実行され、if文を抜けます。

普通はこれで十分なんですが、もし上記すべてのif文の条件式が不成立だった場合には、最後の「else」以降の「Console.Write("入力値を特定できませんでした");」が実行されます。

これでif文が終了します。

これがif文の基本なので、必ず使えるようにしておきましょう。

プログラム効率

if文というのは条件分岐ですから、書き方によってはプログラムの実行速度を左右します。

例えば、今回のサンプルプログラムを以下のように書き換えてもほぼ同じ結果を得ることができます。

// 入力された値を調べる
if (iNumber == 0)
{
    Console.Write("ゼロが入力されました");
}
if (iNumber > 0)
{
    Console.Write("正の数が入力されました");
}
if (iNumber < 0)
{
    Console.Write("負の数が入力されました");
}

「else」を消してみました。

これでもビルドできますし、実行結果もほぼ同じです。

では、このように書き換えると何が変わるのでしょうか?

それは、プログラム効率が落ちます。

なぜかというと、この場合「else」が頭に付いてないif文というのは必ず条件式の判定が行われてしまうからです。

具体的には、変数「iNumber」にどんな値が入っていても、必ず3回if文の条件式の判定作業が行われます。

仮に変数「iNumber」に「0」が入っていた場合、最初のif文で条件式が成立しているのでそれ以降は無駄なんですが、「else」が書かれていないので残り2回if文の条件式の判定作業が行われてしまうわけですね。

このようにif文ひとつでプログラム効率が良くなったり悪くなったりするので注意しましょう。