if文の使い方その1
今回から数回に分けて、C#のif文について学習していきます。
プログラムの流れ
ここでは、プログラムの流れについて考えていきます。
プログラムの流れという言葉ではイメージしづらいという場合は、プログラムの動きと思っていただいても問題ありません。
それでははじめていきましょう。
プログラムってユーザーの立場で使っているときは、一瞬でいろいろな処理をしているように見えるので、内部でプログラムが「どんな流れで動いているのか」なんて考えないと思います。
でも、この記事を読んでいるということは、もうあなたはただのユーザーではなく、作り手側ですから、このタイミングでプログラムの流れについても学習しておきましょう。
実はC#に限らず、すべてのプログラミング言語では、三種類のプログラムの流れしかありません。
この三種類をひたすら組み合わせることにより、プログラムは複雑な処理を実行しているのです。
では、その三種類とは一体何なのかを学んでいきましょう。
連続処理
連続処理とは、プログラムの流れが一つしかないプログラムの動きのことです。
例えば、一方通行の一本の道があった場合、車はその道を決められた方向にまっすぐ走るしかありませんよね。
プログラムの流れもそんなイメージです。
一つの流れしかありませんから、誰がどこでいつ動かしても、同じ結果になります。
具体的には、今まで学習してきたC#プログラム例がそうです。
文字を表示させるだけとか、 計算させるだけとか、 入力された名前を表示させるだけなど、 すべてメインメソッドの最初から始まり、途中に書かれている命令を順番にすべてこなして、メインメソッドの一番下まで来たらプログラムが終わります。
分岐処理
分岐処理とは、プログラムの流れが二つ以上に分かれる処理のことです。
例えば、最初は一本の道だったけど、途中で二股に分かれている道みたいなイメージです。
どちらに進むかはその時の状況次第です。
大きなプログラムになると、この分岐処理が無数に存在します。
そのぐらい大切な処理です。
実は今回から数回にわたって学習していくif文も、この分岐処理に当たります。
ループ処理
ループ処理とは、繰り返し行われるプログラムの流れのことです。
例えば、螺旋階段みたいなイメージです。
同じところをひたすらぐるぐる回っていますが、一番上、もしくは一番下まで来たら終了しますよね。
プログラムの流れもそれと同じで、条件を満たしている間、もしくは条件を満たしていない間はひたすら同じ処理が行われる感じです。
プログラムの流れを考える
何らかの問題を解決するプログラムを作る場合、上記三種類を組み合わせて、ソフトウェアを作っていくことになります。
この三種類というのは、あくまでもプログラムの流れ(処理手順)ですから、この部分を先に決めていかないと、実際にプログラムを書くということができません。
プログラミングスクールなどでは、まずはこの辺りを考えられるようにするということで、これら三種類の流れを図にしたりします。
分岐処理はひし形、ループ処理は楕円、それらをつなげる縦横に伸びる線は連続処理、この三種類の図を組み合わせて作るプログラムの流れ図のことを、フローチャートと言ったりします。
まぁでもぶっちゃけ慣れてくると、頭の中で考えられるようになるので、必要ないんですが、その分、頭の中でしっかり考える必要があります。
この設計をミスすると、バグ(エラー)のあるプログラムになったりします。
プログラム例
それでは、分岐処理のif文を使用したC#プログラムを見ていきましょう。
using System; namespace Sample { internal class Program { static void Main(string[] args) { Console.Write(" 0 を入力:"); int nNumber = int.Parse( Console.ReadLine() ); // 入力された値を調べる if (nNumber == 0) { Console.Write("ゼロが入力されました"); } Console.ReadLine(); } } }
ダウンロードしたZIPファイルを解凍して、「Sample.sln」を開くとVisualStudioが立ち上がってきます。
ビルドメニューから「ソリューションのビルド」を選択し、ビルドします。
ビルドが成功したら、F5キーを押してプログラムを動かします。
0の入力を促されるので、「0」を入力しEnterキーを押します。
すると「ゼロが入力されました」と表示されるので、Enterキーを押すとプログラムが終了します。
今回は分岐処理なので、もう一度F5キーを押してプログラムを立ち上げます。
ちなみにこの時点で、何も入力しないでEnterキーを押した場合は、例外処理が発生してしまうので、必ず何らかの数値を入力します。
今度は「1」を入力してEnterキーを押します。
すると、今度は何も表示されませんが、Enterキーを押すとプログラムが終了します。
プログラム解説
それでは、今回使用したプログラム例を解説していきます。
入力を促す
まずは、ゼロの入力を促すメッセージを表示し、ユーザーが入力された値を受け取ります。
Console.Write(" 0 を入力:"); int nNumber = int.Parse( Console.ReadLine() );
ユーザーからの入力は、以前学習したように「Console.ReadLine」で行いますが、今回は、入力された文字を数値として扱っていきたいので、「int.Parse」のカッコに入れて使っています。
「int.Parse( Console.ReadLine() )」とすることで、int型の変数で数値を受け取ることができます。
入力値を評価する
次に、入力された値をif文で判断し、その後の処理を分けます。
if文の書き方の基本は…
if ( 条件式 ) { 条件が成立したときに行われる処理 }
まず、「if」と書いてから、その後に続くカッコ内に、条件式を書きます。
もし、カッコ内の条件式を満たしていた場合は、その後に続く「{」から「}」に囲まれている部分が実行されます。
そうでない場合は実行されません。
今回のプログラム例では、以下の部分ですね。
if (nNumber == 0) { Console.Write("ゼロが入力されました"); } Console.ReadLine();
if文で変数nNumberを評価します。
条件式は「nNumber == 0」です。
プログラムの実行結果からもわかるように、この条件式は、変数nNumber内の数値がゼロかどうかを調べるものです。
「==」というのは、「==」の左辺と右辺が等しかったら成立という意味があります。
なので、ユーザーが「0」を入力した場合は、変数nNumberの値も「0」になるので、条件式が成立し、「Console.Write("ゼロが入力されました")」が実行されます。
しかし、「0」以外の数値を入力した場合は、if文が成立しなくなるので、何も表示されません。
そして、if文が成立してもしなくても、「Console.ReadLine」は実行されるので、プログラムが最後に一時停止されるという感じです。
まとめ
今回のプログラムの流れは、数値を入力するまでは一本の道ですが、入力された数値によって道が二つに分かれ、最後に合流して一本の道に戻る感じです。