プロパティで少しやらかしたお話

こんにちは〜

最近失敗談しか書いてない気がしなくもないですが、今回も本当にくだらない失敗談です。

先に結論を書いておきますと、誤字には気をつけようと言うことです。

今回のきっかけとなったのはプロパティ。そもそもプロパティとは何かといえば、

getとかsetとかの話ですね。

private GameObject hoge;

public GameObject Hoge {
	get {
		return hoge;
	}
	set {
		if (hoge == null) {
			hoge = value;
		}
	}
}

このような感じで、本来の変数(hoge)をprivateにし、仮の変数(Hoge)をpublicにします。(あくまで例えですので、必ずではないですよ?汗)

そして、仮の変数内にはgetとsetという2つを置きます。

getでは、値を取得する際に実行されるコードを(returnで値を返します)、setで値を代入する際に実行されるコード(valueに代入された値が入っています)を書きます。

そうする事で、書き方によっては読み取り専用の変数にしたり、書き込む際に数値をいじったりすることができます。

今回のコードでは、getではそのままreturnしているので読み取れますが、setではhogeが空の時のみ代入できるようにしているので、初期化位置が自由な定数を作っています。

・・・とまぁここは今回あまり関係ないのでざっくり説明しました。分かりづらければ「C# プロパティ」などで調べてみてはいかがでしょうか?

 

今回の失敗談の原因は、プロパティは仮の変数名を本来の変数名のはじめの一文字だけを大文字にするのが基本、という風習と言いますか、常識と言いますか、それによりぱっと見で過ちに気づきにくいというところです。

今回は、上のコードで言えば5行目、return hoge;を、return Hoge;としていました。

たったこの誤りで、HogeはHogeを返すという無限ループに陥りました。。。

更に今回、このコードを初めて使った位置が、少しややこしい事をしている場所だったので、unityが落ちた原因がこっちだと気づくのに数十分。結構無駄にしてしまいました。

というかunityさん、無限ループしたら落ちるようになったんですねΣ(・□・;)

今までみたいに落ちずに固まってくれたらもう少し早く気付けたような・・・(言い訳)

という事で、プロパティを使う際は大文字小文字に注意して書いてくださいね!

それではまた〜





↓もしこの記事が参考になったら、下のいいねボタンを押していただけると非常に助かります!(ログイン不要)↓

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です