【Unity入門】UnityのC#基礎【条件分岐】

さて、前回までで変数と関数について学習してきました。まだなんとなーくでしか理解できてない人も、まぁ大丈夫です。今回はプログラミングらしいことをしてみたいと思います。

この記事は本のように順を追って解説しています。この記事は途中のページになります。この記事を見ていて、現在の状況がわからない場合や忘れてしまった事などが出てきたら↓のリンクから目次ページへ飛べますので立ち戻って見てください。

<条件分岐とは>

プログラムを組んで行く上で、条件分岐というものをよく使う事になると思います。これはどういうものかというと、○○だったらAをして△△だったらBをしてみたいな感じです。

よくあるものでいうと、Bボタンを押したらジャンプして、Aボタンを押したら周囲を調べるみたいな感じです。

この「〇〇をしたら」という部分が条件分岐になります。

こういった物を実装するために条件分岐のやり方を解説していこうと思います。

<if>

C#の基本的な命令でifというものがあります。基本的な命令ってなんやねんって話ですが、C#に最初から入ってる機能ですね。ifというと「もし〜なら」です。まぁ、とりあえずやってみましょうか。

if

↑の文はもし「a>0」なら「ifの{ }の中」を通ります。もし「a>0とは違う」なら「elseの{ }の中」を通ります。という意味です。

↑なら絶対「if{ }の中」を通ります。

この場合コンソールウィンドウに「aは0より大きいです」とだけ表示されます。

また、こんな風に条件を増やすこともできます。

if else

もし、a>0だったら一番上を通り、aが0だったら真ん中を通り、それ以外だったら一番下を通ります。

このように、else if()と書くことでもし〜だったらの分岐を増やすことができます。

この時、複数の条件を満たすことがあったとしても、上に書かれたものが優先的に選ばれます。

if priority

こんな感じですね。

この場合一番上と真ん中の両方を満たしていますが、一番上しか通りません

これを実行してもコンソールウィンドウに「 aは0より大きいのでここを通ります。 」という1文だけ表示されます。

ちなみに、else ifとかelseとかは別にいらなかったら書かなくても大丈夫です。

このように条件によって処理を切り分ける事ができ、いろんなところで使うので覚えておいてください。

<bool型>

さて、a > 0とかa == 0とか自然に条件式を書いていましたが、実はこれは1つの型です。

bool型と言って、真か偽かを表します。プログラムでは真をtrue,偽をfalseと書きます。

int a = 1;
if(a > 0)
{
}
else if (a == 0)
{
}

この場合、a = 1なので a > 0 は true。 a == 0 は falseになります。C#が勝手に中で計算してくれているのでいちいち型を書く必要がなかった感じです。

↑の例を書き直すと

bool

このように書くこともできます。これを実行すると

log if

という出力が得られます。
あとなんかサラリとやってしまいましたが、文字列は足し算で繋げられます。

if文の( )の中はbool型trueならその中を通ってfalseなら下の条件文に行くみたいな感じです。ちょっとプログラムっぽくなってきました。次はちょっと難しくいきます。

<条件式>

さて、↑の例では条件式は1個でした。次はこれを複数にしてみたいと思います。

and or

今度はbという変数を追加してみました。今度は条件式がちょっと変わったことになっています。
aの条件式とbの条件式の2つがありますが、「&&」は「○○かつ△△」という意味です。

||(LLではない(キーボードのShift + ¥))」は「○○または△△」という意味です。

なんのこっちゃいって話ですが、&&と書かれている場合、左側がtrueでなおかつ右側もtrueだった場合結果がtrueになります。

||と書かれている場合、左側、もしくは右側のどちらか一方でもtrueだった場合、結果がtrueになるという感じです。

ちなみに「○○かつ△△」や「○○または△△」というのは○○と△△がbool型であればいいので&&や||はさらにいろんな使い方ができます。

and or any

頭こんがらがりそうですが、( )でくくることによって条件式の結果をさらに条件式にかけることができます。また、( )でくくらずに

a != 0 && a < 0 && b != 1 && b > 0

みたいに連続で書くこともできます。この場合全ての条件を満たさないとtrueになりません。
ちなみに

a != 0 && a < 0 || b != 1 && b > 0

こう書いちゃうと

(a != 0 && a < 0) || (b != 1 && b > 0)

と同じ意味になります。

ちなみにまたサラリと登場しましたが、「!=」は「等しくない」という意味です。
a != 0はaは0ではないと言っているのでtrueですね。

さて、ややこしくなってしまいましたが、なんとなくこんなことができるということを覚えておいてもらえればいいかなと思います。

ちなみに大なり小なりを「<」と「>」で書いてきましたが、以上以下を表すには「<=」と「>=」と書けます。大なり小なりの後に=をつけるだけですね。

ややこしい条件がたくさん出てきましたが、複数の条件を使用することは多々出てくると思うので、覚えておくといいと思います。

例えばRPGとかで「村人から情報を聞いている」もしくは「鍵を持っている」状態で、「レベル30以上」であるならイベントを発生するなどなど。色々な場面で使う事になると思います。

Point

・「if(条件){ }」で「もし条件を満たすなら」という分岐を作る事ができるよ!
・「if(条件){ }」の後に「else if(条件){ }」と書く事でさらに分岐ができるよ!
・「if(条件){ }」の後に「else{ }」でそれ以外の場合に分岐できるよ!
・条件はbool型で表されて、trueかfalseかのどちらかだよ!
・条件を複数満たしたとしても実行されるのは満たした中で一番上のものだよ!

覚えておきたい

a==b・・・aとbは等しい
a<b・・・aはbより小さい
a<=b・・・aはb以下
a>b・・・aはbより大きい
a>=b・・・aはb以上
a!=b・・・aとbは等しくない
A||B・・・AまたはBがtrue
A&&B・・・AかつBがtrue

<switch>

さて、if文で条件分岐をしてきましたが、ちょっと便利な条件分岐を紹介します。

1つの比較対象で複数の答えに分岐したい場合があったとします。その場合、if〜else if〜else if〜・・・と続けていくよりswitchと書いた方が楽です。ちょっと見てみましょう。

switch

↑で何やら条件分岐しているようです。

switch(比べる元の値)
{
 case 比較する値:
  処理;
 break;
}
と書かれています。↑の場合だとaが比べる元の値で比較する値がたくさん並んでいます。
↑だとa = 1なのでcase 1:のところを通ります。

↑の文をif文で書くと

if(a == 0)
{
}
else if(a == 1)
{
}
else if(a == 2)
{
}
else if(a == 3 || a == 4)
{
}
else
{
}

となります。これだけ書くのはめんどくさいですね。このように比較対象が1個の時switch文を使うと楽に書く事ができます。

1個と書きましたが、別に値が1つに定まればいいので計算式などを書いてもいいです。

switch(a + b + c)とかですね。

この場合、複数の値が含まれていますが、結果1個の解になるので1つの値と言えます。数学と違ってプログラミングでは不明な値というものは基本ないので絶対に解が求まります。というか値が入ってないとエラーになります。

caseで比較する値でこれに当てはまればその中の処理を実行します。
そして、break;と書いてあるところまで実行します。

つまり、break;と書かずにcase: case : と続ければ複数の比較条件にする事ができます。すなわち||と同じです。

default:と書くとそれ以外という意味になります。もちろん書かなくてもいいです。

ちなみにあんまりよくない書き方として

mistake switch

switch( )の中に条件式を書けそうな気がしてきますが、条件式はbool型なのでこれと比較可能なのはtrueかfalseだけです。こうやって書くならif文を使った方が簡単でいいかなと思います。間違いではないですが、ちょっと見づらくなってしまいます。

<まとめ>

さて、いかがだったでしょうか?条件分岐を学んでもまだよく使い方がわからない人もいるかもしれませんが、もし○○だったらというのは非常によく使うので覚えておいてください。色々使い道があるので覚えておくと便利ですよ。

覚えておきたい

・if文
・switch文

<わからない事があったら>

このサイトの説明ではよくわからなかったとか、もっと知りたい事などがあれば、また別の勉強方法があるので違った切り口を使ってみるのもいいと思います。

<オススメの本>

本で詳しい解説がされているので書籍を買ってみるというのも手の一つです。最近はKindle版があるので届くまで待つ事もなく場所も取らないのでとても良いです。

<オンラインスクール>

オンラインスクールでは人に質問する事ができるので、行き詰まってしまった方にオススメです。 無料体験もあるので試しに見てみるのも手ですよ




次回はループ処理について解説していきたいと思いますのでよろしくお願いします。




タイトルとURLをコピーしました