ループ系サンプルコード (Switch文の復習を兼ねて)
このリンクを見て改めて・・・なんとなく、最初に学んだのが
forだったからか、forが好き。
基本、1行でいろいろ定義できる。
配列を使う場合に、配列のLengthが、実際の要素数より1多い事に注意が必要。
10個の要素があっても0番から始まるので、当然だが・・・
そういう問題点はあると思うが、基本自由度が高い印象。
foreach は簡潔に書けるが汎用性が低そう。
配列系を全部なめるときは良さそう。
もっと使っていいと思うが、現状はなんでもfor文になってるかも・・・
whileは、とても使いやすそうに見えるが・・・
とりあえず試し書きしながらというのが今の環境だと難しい。
コンパイルエラーがでなくても、Unityがプレヴュー実行可能で、脱出条件を書き忘れると
無限ループになって固まってしまうので慣れないと使いにくい。
その問題がなければ使いやすそうだが、現環境では学習効率上、致命的な欠点なので・・・
なので躊躇して書かないから、一年後も書けるようにならない気がする。
以下テストコード丸ごと
※ Unity Mac VScode 利用でのテスト用
てきとうなゲームオブジェクトにこのコードを貼り付けてインスペクタで
ループモードを変えれば、プリント内容が変わります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Foreach_For_While : MonoBehaviour {
private int[] IntArray ={0,11,222,3333,44444,555555};
public enum LoopMode {Foreach,For,While,Stop};
public LoopMode MyLoopMode;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
switch(MyLoopMode)
{
case LoopMode.Foreach:
// int count=0;
// ▲ Switch文はif文と違ってスコープが別れていないので、同名のローカル変数を作りにくい?
// ▼ ・・・と思ったけどスコープの外に書いているからダメだったのがアドバイスで解りました。
{
int count=0;
foreach(int num in IntArray)
{
print("foreach__"+num.ToString());
count++;
if(count==IntArray.Length){MyLoopMode=LoopMode.Stop;}
}
break;
}
case LoopMode.For:
int maxF=IntArray.Length-1;
for(int i=0;i<=maxF;i++)
{
print("for__"+IntArray[i].ToString());
if(i==maxF){MyLoopMode=LoopMode.Stop;}
}
break;
case LoopMode.While:
int countW=0,maxW=5;
//while(int id < IntArray.Length)
// ↑ と 型を書いて定義することはできないっぽい。
//ちょっとしたミスで、無限ループになる可能性がそこそこある…Unityが固まる。
while( countW <= maxW)
{
print("while__"+IntArray[countW].ToString());
if(countW==maxW){MyLoopMode=LoopMode.Stop;}
countW++;
}
break;
case LoopMode.Stop:
break;
}
}
}