コーディング のバックアップ差分(No.12)

Unity学習帳2冊目コーディング のバックアップ差分(No.12)
« Prev  Next »
11: 2016-06-18 (土) 10:57:45 osinko ソース 12: 2016-06-18 (土) 21:00:31 osinko ソース
Line 13: Line 13:
-基底部、帰納部の二段階で関数を作成する(ドミノの一つ目、それに続く無限のドミノ、とふたつに分ける) -基底部、帰納部の二段階で関数を作成する(ドミノの一つ目、それに続く無限のドミノ、とふたつに分ける)
-基底の呼び出しの際は出来るだけ余計なデーターを渡さないように設計する -基底の呼び出しの際は出来るだけ余計なデーターを渡さないように設計する
--派生する関数(帰納部)には「差が生じるデータ」を参照渡ししないようにする+-派生した関数(帰納部)で扱う「差が生じるデータ」部が参照渡しの値の場合、希望する動作により呼び出し元が書き換えられると困る場合もあるので値の動きに注意する。必要であれば複製する
-帰納関数の入口に終了条件を設定する -帰納関数の入口に終了条件を設定する
Line 32: Line 32:
   void Start()    void Start()
   {    {
-       int length = 4;+       int length = 3;
       char[] set = { 'A', 'B', 'C' };        char[] set = { 'A', 'B', 'C' };
Line 65: Line 65:
           for (int i = 0; i < set.Length; i++)            for (int i = 0; i < set.Length; i++)
           {            {
-               char[] cloneDat = (char[])dat.Clone();  //オブジェクトを複製する(帰納関数に参照渡ししないために大事な事!)+               char[] cloneDat = (char[])dat.Clone();  //オブジェクトを複製する
               cloneDat[level] = set[i];                cloneDat[level] = set[i];
-               Loop(cloneDat, level, set, strList);    //複製したものを派生する帰納関数に渡すことが大事(それが差になる)+               Loop(cloneDat, level, set, strList);    //帰納関数には複製された参照値が渡される為、呼び出し元側の値が書き換えられることは無い
           }            }
       }        }
Line 88: Line 88:
           }            }
       }        }
 +   }
 +}
 +
 +}}
 +
 +***補足:値渡し、参照渡しとは? [#v46aed99]
 +
 +以下のコードの出力は
 +
 +123
 +0
 +789
 +
 +となる
 +
 +変数valListの内容が関数内で書き換えられている点に注目。int型は値型だが、int[]型は参照型になるので関数は参照渡しを受け取り、呼び出し元を書き換える
 +つまり帰納関数で同様の事をした場合、派生先の関数内の書き換えで呼び出し元を書き変える事になり希望していた効果が得られない事がある
 +
 +#code(csharp){{
 +using UnityEngine;
 +using System.Collections;
 +
 +public class TestMetho : MonoBehaviour {
 +
 +    void Start () {
 +
 +       int val = 123;
 +       int[] valList = { 456, 789 };
 +
 +       Method(val, valList);
 +
 +       print(val);
 +       print(valList[0]);
 +       print(valList[1]);
 +    }
 +
 +   void Method(int val, int[] valList) {
 +       val = 000;
 +       valList[0] = 000;
   }    }
} }
« Prev  Next »


トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom