【完走目指す】初心者が25日で強くなる Advent Calendar 2022
20日目です。
とりあえずここまでで躓いてきたことについてまとめておこうと思います。
動かない
せっかく書いたプログラムが動かない。
今までも何度かあった。
原因を探す→直す→また動かない
動くようになるまでこの繰り返し。疲れる。
ではどうするべきなのか。
考えた原因
主に3つ
1.スペルが間違っている
たまにあるやつ。でも、これはちゃんとエラーが出てくれる。危ないのは大文字と小文字の打ち間違い。
例:
public int a;
public int A;
滅多にないが、大文字と小文字で別の変数が呼ばれる場合があるとする。この場合、エラーが出ないので動いてくれない原因を探るのに時間を要することがある。ちなみに、自分もアドベントカレンダー4日目で最初やらかしていた。
対処法としては、似た名前にするのを極力控えることくらいしかないだろう。
2.出来ると思い込む
かなり多い。例えば、オブジェクトの角度を指定するために位置を取得するように書くとエラーになる。
↓こんな感じ。
オブジェクト「A」があったとします
A.transform.position = new Vector3(0, 0, 0);
位置はこれで取得できます。
しかし角度を同じように
A.transform.rotation = new Vector3(0, 0, 0);
こう書いてしまうと
こうなります。
以下がうまくいく例です。
↓
HariM.transform.rotation =Quaternion.Euler(0,0,6f);
初心者をだましに来ているのでしょうか。
ちょっとpositionがrotationに代わっただけなのに。
今の例には、落とし穴がもう一つ潜んでいますね。
数字にfをつけるかつけないかです。
2つを見比べてみましょう
A.transform.position = new Vector3(0, 0, 0);
HariM.transform.rotation =Quaternion.Euler(0,0,6f);
かっこ内の数字にfが付いているものといないものがあります。
中身をよく理解していないとごちゃごちゃになります。
エラーが出ないことの大変さ
中身をあまり理解せず何となく作ったら、きっと動かなくなるでしょう。
現に自分も、作ったものに後々不具合が起きて直しています。
エラーが出ないとそれはそれで何かあった時に大変であることがよくわかりました。
3.可能性の見落し
エラーが出ない場合もある面倒な奴です。if文を使ったときとか条件分岐のどこかで、自分の考えていなかった答えが出てきてしまう。そういうことがあるでしょう。
でも、複雑になればなるほど見落しも増えるだろうしこれは実際に動かさない限り見つけることもできないのではないでしょうか。
対処法
これはもう、自分がちゃんと文の中身と起こりうる可能性を把握する以外にないでしょう。
文の中身の理解は頑張ればできるでしょう。しかし、起こるかもしれない可能性をすべて考えるのはなかなか難しいでしょう。
個人的には一気に作り上げるよりも、一文書いたらどんな動きをするのかその都度考えたほうがかえって早く済むのではないかと思います。
まとめ
理解は、大事
この記事を書いた理由:
18にちめのスタンプカードにおいて、ちゃんと保存されない不具合が出ていました。
その時はエラーが出なかったのでそのままにしていたけど、あとでちゃんと動かなくなりました。
この不具合を直すために1日かかりました。やはり中身を理解しきれていなかったのが一番の原因だと考えています。これからは、気を付けて作ろうと思います。
20日目 終わり