初心者のためのC#プログラミング本格入門21 - 複数の条件がある場合の対処法
記事をよみやすくするために、現在作っているプログラムの処理の流れを再度掲載します。
- コンソール画面上で、正しい数値1が得られるまでトライする。
- コンソール画面上で、正しい演算子が得られるまでトライする。
- コンソール画面上で、正しい数値2が得られるまでトライする。
- 入力された数値と演算子を使って計算する。
- コンソール画面に、計算式と計算結果を出力する。
- ユーザーに計算を続けるか尋ねる。
- 計算を続ける場合は手順1へ戻る。
- 計算を終了する場合はここでプログラムを終了する。
現在、処理1をプログラム化し、処理2をプログラム化するところです。前回同様、処理2の詳細を箇条書きしてみましょう。
- コンソール上にメッセージを表示し、ユーザーに演算子を入力してもらう。
- 入力された文字列が、「+」、「-」、「*」、「/」、「%」のうちどれからならば処理成功。
- 入力された文字列が演算子でなければ、コンソール上にエラーを表示し手順1へ戻る。
- ここまでくれば処理成功なので、入力された文字列を呼び出し元へ返す。
問題となるのは手順2です。if文を紹介した時、if( 条件 )だと記述しました。しかし今回の場合、複数の条件があります。 複数の条件というのは、「入力された文字列が+」もしくは「入力された文字列が-」というふうに、5つの候補の内どれかならば処理成功している点を指しています。if文を複数回書いて判定できますが、それでは読み難いプログラムになってしまいます。if文の新しい記述法を学ぶべき時が来ました。
実はif文の条件は複数指定できます。if文はtrueもしくはfalseの値を受け取るので、複数の条件を指定した場合は論理演算子を使って条件をつなげます。論理演算子は幾つかありますが、一度に沢山覚えるのは大変なので、今回はOR論理演算子だけを紹介します。
OR論理演算子の使い方は、プログラムを実際に書いてみればよくわかります。手順2をプログラムで表現すると・・・
if ( sign == "+" | sign == "-" |
sign == "*" | sign == "/" | sign == "%" )
{
success = true;
}
C#のOR論理演算子は「|」記号を使います。Shiftキーを押しながら「\」のボタンを押せば入力できます。日本語で表現すると、「条件1」もしくは「条件2」・・・という具合になります。
OR論理演算子は、どれかの条件が当てはまる場合にtrueを返します。if文はtrueならば波括弧内のプログラムを実行するので、これで手順2をプログラムとして表現できます。
次は手順3を考えてみましょう。手順3は変数successがfalseかどうかを判定すれば実現できますが、またif文を書くのは面倒です。それに、手順に違う条件があるように見えてしまい、必要以上に複雑に感じてしまうかもしれません。
そういった場合はif文にelseというキーワードを指定し、条件を満たさない場合の処理を追加します。
if ( 条件1 | 条件2 )
{
trueならばここのプログラムが実行される
}
else
{
falseならばここのプログラムが実行される
}
この様に記述すれば、一目で条件を満たさない場合の処理が分かります。試しに手順2と3をプログラムにしてみましょう。
if ( sign == "+" | sign == "-" |
sign == "*" | sign == "/" | sign == "%" )
{
success = true;
}
else
{
string errorMessage =
"「+」「-」「*」「/」「%」のどれかを入力して下さい";
System.Console.WriteLine( errorMessage );
}
ここまで分かれば処理2もプログラムとして表現できます。模範解答を示します。
private static string GetSign()
{
string sign;
bool success = false;
do
{
string message = "符号を指定して下さい";
sign = InputValue( message );
if ( sign == "+" | sign == "-" |
sign == "*" | sign == "/" | sign == "%" )
{
success = true;
}
else
{
string errorMessage =
"「+」「-」「*」「/」「%」のどれかを入力して下さい";
System.Console.WriteLine( errorMessage );
}
} while ( success == false );
return sign;
}
今回の記事はこれで終わりです。今回の記事で示したように、C#の文法は必要な時その都度覚えるようにすれば、比較的容易に習得できます。人間は必要でないものは忘れる生き物です。無闇に文法を暗記しようとせず、どういった時に使用するのかを考えて覚えましょう。そうすれば、受験英語の様な無味乾燥な勉強でなく、有益なC#プログラミングの学習となります。