ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity入門 - C#スクリプトの文法③条件分岐(if文, switch文, ?演算子)-

初めに


 

 C#スクリプトの中で使われるif、switch、?演算子について、解説します。この記事を読めば、条件分岐に使われる文法が一通り把握できます。

if文

 if文は下記のような文のことです。

if(条件式){
  //条件式がtrueならばここに入る, falseならば入らない
}

 
 if は日本語で ”もし~ならば" と訳されます。例えば "If I got up early, I could have written a blog" (もし早く起きたのなら、ブログが書けたのに)のような感じです。c#におけるif文も同じで、"条件式がtrueならば、if以下のスクリプトを実行する” というようになっています。
 例えば、次のような文が作れます。

int a = 0;
if(a == 0){
  Debug.Log("a = 0 なので, a == 0 はtrue");
  //trueなので上のログは表示される
}

if(a == 1){
  Debug.Log("a = 1 ではないので, a == 1 は false");
  //falseなので上のログは表示されない
}

else if文、else文

 if文を続けて書く場合、else if文、else文を用いたほうが簡潔に書ける場合があります。

if(条件式①){
  //条件式①がtrueならばここに入る, falseならば入らない
}
else if(条件式②){
  //条件式①がfalseで、条件式②がtrueならばここに入る
}

if(条件式③){
  //条件式③がtrueならばここに入る
}
else{
  //条件式③がfalseならばここに入る
}

if(条件式④){
  //条件式④がtrueならばここに入る
}
else if(条件式⑤){
  //条件式④がfalseで、条件式⑤がtrueならばここに入る
}
else{
  //条件式④、⑤がどちらもfalseならばここに入る
}

 else は日本語では "そうでなければ、それ以外" のような訳され方をします。もし条件式が成り立てば、if文の中が実行され、そうでなkればelse文の中が実行されます。else文にも条件を付けたい場合は、else if文を使いましょう。
・具体例

int a = 0;

//aの絶対値を取り、+1をする
if(a < 0){
  a *= -1;
  a += 1;
}
else{
 a += 1;
}

//今回はa = 0のため, else文に入り、1足されるので、a = 1となる

演算子

 ?演算子を用いて、if文を表記する方法があります。下記のように書きます。

条件 ? trueの場合 : falseの場合;

 少し分かりづらいため、具体例を見てみましょう。

int a = -1;
//a の絶対値を取る
a > 0 ? Debug.Log("a > 0のため何もしない") : a *= -1;
//a = -1のため、aに -1が掛けられ、a = 1となる

 ?の前に条件が書かれていること、コロン(:)の左右にtrueの場合、falseの場合の挙動が書かれていることを抑えておけばよいでしょう。

switch文

 条件分岐の数が多くなった場合では、if文では不便かもしれません。その場合はswitch文を使うときれいなスクリプトが書けます。

switch(変数){
  case 値①:
  //変数が値①である場合の処理
  break;
  case 値②:
  //変数が値②である場合の処理
  break;
  case 値③:
  //変数が値③である場合の処理
  break;
  default:
  //caseで指定された以外の値の処理
  break;
}

 変数の値がcaseのとなりに書かれた値と等しいときに、その下に書かれた処理をします。

  • break:処理後にswitch文の外にでる
  • default: どのcaseでもない場合の処理。なにも処理をしてほしくない場合は、break; だけ書く

・具体例

int i = 6;

switch(変数){
  case 1:
    Debug.Log("i = 1ではないため、ここは処理されないが、case 6から戻ってくる");
  break;
  case 2:
    Debug.Log("i = 2ではないため、ここは処理されない");
  break;
  case 6:
    Debug.Log("i = 6なので、ここの処理がされる");
    goto case 1;
  break;
  default:
    Debug.Log("上のcaseが実行されたので、ここは処理されない");
  break;
}

 上のスクリプトの中で goto case を使いました。caseの後に他のcaseの処理をする場合は goto case 値 を使いましょう。

switch文で使える変数

 数値型、bool型、文字(char)型、列挙型(enum)、文字列(string)型です。
 int である必要も数値である必要もありません。

最後に

 条件分岐の方法として、if文、switch文をご紹介しました。次回は反復処理であるfor文やwhile文をご紹介します。よろしければぜひご覧ください。