Edited at

プログラム超初心者メモ ループ系サンプルコード (Switch文の復習を兼ねて)

More than 1 year has passed since last update.

ループ系サンプルコード (Switch文の復習を兼ねて)

https://unity3d.com/jp/learn/tutorials/topics/scripting/loops

このリンクを見て改めて・・・なんとなく、最初に学んだのが

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;
}
}
}