Unityでif(object)がなぜ通用するのか?

Unity

普通はif(object != null)って書かないとboolに変換できませんが、Unityだと以下のようなコードが当たり前に出てきます。

if (!Physics2D.OverlapCircle(somePosition, 0.2f, blockingLayer))
{
    y = Input.GetAxisRaw("Vertical");
}

仕事でコード書いてるときにこんな書き方をしたことがなかったですし、そもそも書いてもエラーになっちゃいます。

調べてみるとUnityのオブジェクトは暗黙的な変換演算子を定義しているようです。

public static implicit operator bool(ClassName me)
{
    return me != null;
}

こういう書き方を好むのは昔のCとかC++コーダーらしいです。
最近はユーザー定義の変換演算子を使うのは邪道(コードの改修とかで困る)らしいので、素直に!=nullと書いた方が良い気がします。

Unityに限っては皆が使ってますし、誰も困らないでしょうから私はif(object)を使います。

コメント