最近寒くなりましたね。風邪には気をつけましょうね。el(える)です。
今回は分岐条件をやっていこうと思います。
分岐条件とは条件に応じて処理を変化させる方法です 。
当たり判定の条件
当たり条件のプログラムを書いていきましょう。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { //人の位置 int playerPos = 7; //モンスターの位置 int enemyPos = 10; if(playerPos == enemyPos) { Console.WriteLine("接触しました"); } } } }
playerPosを人の位置、enemyPosをモンスターの位置として宣言しています。
このプログラムを実行しても位置が違うため表示はされません。
if文の書式
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { if (条件式) { 条件式を満たしたときに実行する処理 } } } }
if文は条件式の真偽によって処理の流れを変えられます。
条件式が真の場合は{}の中に書いたプログラムが実行されます。
偽の場合は、{}の中の処理は実行されません。
条件式は関係演算子を使います。
左辺と右辺が等しいかどうかを調べる==演算子をつかっています。
演算子は他にもあります。
演算子 | 使用例 | 意味 |
== | a == b | aとbが等しければ真 |
!= | a != b | aとbが等しくなければ真 |
> | a > b | aがbより大きければ真 |
>= | a >= b | aがb以上なら真 |
< | a < b | aがbより小さければ真 |
<= | a <= b | aがb以下なら真 |
スコープ
プログラム内の{}で囲まれた部分をブロックと呼び、プログラムコードのまとまりを示しています。
変数は、宣言したブロック内でのみ使うことができます。これを変数のスコープ(有効範囲)といいます。
また、if文やメソッドなどのブロック内で宣言した変数をローカル変数といいます。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int a = 5; ←if文の範囲外で宣言 if (a == 5) { int b = 10; ←if文の範囲で宣言 } Console.WriteLine(a); ←if文の外で定義しているので有効範囲となり実行される Console.WriteLine(b); ←if文の中の変数なので有効範囲外でエラーとなる } } }
2つの条件を同時に満たす
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int Player1Pos = 3; int Player2Pos = 8; if (Player1Pos == 3) { if(Player2Pos == 8) { Console.WriteLine("2つの条件が満たされました"); } } } } }
このプログラムではif文を入れ子(if文の中にif文を書く)ようにしています。
条件式をシンプルに書くこともできます。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int Player1Pos = 3; int Player2Pos = 8; if (Player1Pos == 3 && Player2Pos == 8) { Console.WriteLine("2つの条件が満たされました"); } } } }
複数の条件を満たしたときだけ処理を実行 するには、条件式を&&演算子で繋ぎます。 複数の条件のうち1つでも満たせば処理を実行 するには||演算子で繋ぎます。
条件式はいくつ繋げてもよいです。
アクションを変えよう
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int Player1Pos = 3; if (Player1Pos >= 0) { Console.WriteLine("歩く"); } else { Console.WriteLine("泳ぐ"); } } } }
今回のプログラムはプレイヤが地上にいるときは歩く、地上にいないときは泳ぐ動作をします。
条件を満たす場合と満たさない場合で異なる処理をするには、
if~else文を使います。
if~else文の書式
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { if (条件式) { 条件を満たす場合の処理 } else { 条件を満たさない場合の処理 } } } }
if文の後ろにelseブロックがくっつきます。
条件式が満たされた場合は条件式に続くブロック内の処理が実行 され、 満たされない場合はelseに続くブロック内の処理が実行 されます。
動作を変えよう
3種類以上の場合分けをしたい時は次のプログラムを使います。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int mapType = 3; if (mapType == 0) { Console.WriteLine("歩く"); } else if(mapType == 1) { Console.WriteLine("泳ぐ"); } else if(mapType == 2) { Console.WriteLine("走る"); } else { Console.WriteLine("止まる"); } } } }
このプログラムではmapTypeの数値によってアクションが変わっています。
このように、 条件式が複数必要な場合はif~else if~else文 を使います。
if~else if~else文の書式(else ifは複数書くことが出来ます)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { if (条件式) { 条件を満たす場合の処理 } else if (条件式) { 条件を満たす場合の処理 } else { 条件を満たさない場合の処理 } } } }
if~else if~else文は上から 順番に条件式をチェックし、真の場合は条件式に続くブロックの処理を実行 します。
どの条件にも満たさない場合には、最後のelseブロックの処理が実行 されます。switch文
3種類以上の場合に分けて条件を指定するときはif~else if~else文のかわりに、
switch文が使われる時があります。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { int mapType = 3; switch (mapType) { case 0: Console.WriteLine("歩く"); break; case 1: Console.WriteLine("泳ぐ"); break; case 2: Console.WriteLine("走る"); break; default: Console.WriteLine("止まる"); break; } } } }
switch文の書式
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Sample { class Program { static void Main(string[] args) { switch (条件式) { case 定数1: 文1・・・ break; case 定数2: 文2・・・ break; default: 文D・・・ break; } } } }
switch文内の条件式がcaseのあとの定数と一致すれば 、 そのあとに続く文からbreakまでの文を実行 します。
どれにもあてはまらなければ、default:の文を実行します。
default:は省略することも可能です。
終わりに
今回はif文でしたね。
これもシェルとかバッチとかWSHとかでも出てきたので問題なさそうです。
ちゃんと覚えておりました。
文法的にも難しくはないはずです。
でもまだ不安だから勉強のために以下の本が欲しいなぁ。
でもお金がない。。。
それではまた次回。