めーぷるのおもちゃばこ

- アイドルになりたいエンジニア女子の制作日記 -

【Unity】【C#】? : ←これなに!?三項演算子について

はじめに

Unityでサンプルスクリプトを見ていて、?と: が入った謎のコード文に出くわしたことはありませんか?
私はあります。最初ビビりました。
「?」 と「:」 は三項演算子と呼ばれる条件演算子です。
難しいものではなく、if文をスッキリ書いた的なあれです🐼
今日はこの三項演算子について書いていきましゅ。

解説

使い方としてはこんな感じです↓

<条件式> ? <trueの時に返す値> : <falseの時に返す値>


つまり、こういう文を

if(b){
    a = 2;
}else{
    a = 3;
}

こう書ける↓ということです🐼コードがスッキリしますね!

a = b ? 2 : 3;


else ifで繋げる時は、例えば以下のようなif文は

if(a == 0){

    text.text = "0";

}else if(a == 1){

    text.text = "1";

}else if(a == 2){

    text.text = "2";

}else{

    text.text = "3";
}


このように↓かくと行が減ってスッキリします🐼

text.text = a == 0 ? "0" : a == 1 ? "1" : a == 2 ? "2" : "3";


ただこれだと少し見にくいので、こういう風に↓改行すればわかりやすく且つコンパクトに書けます。

text.text = 
  a == 0 ? "0"
: a == 1 ? "1"
: a == 2 ? "2" 
: "3";


あくまで演算子なので関数の呼び出しはできません。こういう↓場合はif文を使いましょう。

a == 5 ? move() : stop();


数字などを返す関数であれば代入できるので使用できます↓

int a = 0;
bool flag = false;
      
void Start(){
    a = flag ? hoge() : 0;
}

public int hoge(){
    int a = 5;
    return a;
}


また、以下のようにDebug.Logの中とかTextへの代入の時でも使用することができるみたいです🐼

Debug.Log("hoge" + (a == 0 ? "0" : "1")); 

text.text = "hoge" + (a == 0 ? "0" : "1");


言語によっては以下のような使い方もできるみたいですが、C#ではできないっぽいです。

int age = 16;
bool flag = false;

age < 18 ? Debug.Log("Under18") : flag = false;


といった感じで使います。
ただ、少しややこしいので使わない派の人が多かったりする(宗派的なのがあるっぽい?)みたいなので、
あんまり見ないような気もします。そもそもあまり拡張性がないこともありUnityユーザーだとあんま使う場面がないような気も、?

でも知識として知っとくのは良いし使ってるとなんかかっこいいですね!

以上です🐼