はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】色んな型の既定値を調べてみた

はじめに

今回は色んな型の既定値についての記事になります!

その前に「既定値ってなんや?」といった疑問が生まれるかもしれません。
かくいう私も少し前まで曖昧でした。

簡潔に書くと、既定値は明示的な初期化を怠った時に既定で代入される値のことを指します。

例えばint a;string s;のように明示的な初期化をしていなかった場合は0nullといった値が代入されます。

これについて様々な型だとどんな値が代入されるのか、実験していきたいと思います!

予備知識

ややネタバレに近いですが、既定値は0,false,nullのどれかになります。
これは値型か参照型のどちらかであるかが原因です。

なぜかというと、nullは参照型の何も参照していない状態を表しているので、値型には設定することができません(null許容型を除く)。

加えて構造体の既定値はすべてのフィールドを既定値で埋めたものになります。

これも構造体が値型であるのでnullは代入することができないということです。


また、既定値はジェネリックでよく用いられるdefault(T)によって求めることができます。
今回はこれを用いて調べていきたいと思います!

実験

using UnityEngine;

public struct SampleStruct { }
public enum SampleEnum { }
public class SampleClass { }
public interface ISampleInterface { };

public class Hoge : MonoBehaviour
{
    private void Start()
    {
        Debug.Log(CheckDefaultValue<int>());                //int(値型): 0
        Debug.Log(CheckDefaultValue<float>());              //float(値型): 0
        Debug.Log(CheckDefaultValue<bool>());               //bool(値型): false
        Debug.Log(CheckDefaultValue<char>());               //char(値型): '\0'
        Debug.Log(CheckDefaultValue<SampleStruct>());       //構造体(値型): 前述
        Debug.Log(CheckDefaultValue<SampleEnum>());         //列挙型(値型): 0
        Debug.Log(CheckDefaultValue<int?>());               //null許容型int(値型): null

        Debug.Log(CheckDefaultValue<string>());             //string(参照型): null
        Debug.Log(CheckDefaultValue<SampleClass>());        //クラス(参照型): null
        Debug.Log(CheckDefaultValue<ISampleInterface>());   //インターフェイス(参照型): null
        Debug.Log(CheckDefaultValue<System.Action>());      //デリゲート(参照型): null
        Debug.Log(CheckDefaultValue<int[]>());              //配列(参照型): null
    }

    private T CheckDefaultValue<T>()
    {
        return default(T);
    }
}

さいごに

かなり予想通りな結果になりました。
ただこういう基礎がいずれ役に立つことがあるかもしれません。
覚えておいて損はないでしょう!

また公式で一覧があるみたいです。
もっと詳しく知りたい方は是非。
既定値の一覧表 - C# リファレンス | Microsoft Docs