前回はPointersについて紹介しましたがこれから、Pointerより安全な方法を紹介したいと思っています。これはReferenceです。
Pointerは変数のメモリアドレスを保存するに対して、Referencesはオブジェクトを参照するのイメージです。
定義
nVar:Int:=10;
nRef:REFERENCE to INT:=nVar;
先のコードだと、nRefはいまnVarを参照しています。
つまり、nRefの値が変更になれば、nVarに直接変更すると、同じな結果になります。
例えば、nRefを30書き込みますと、nVarの値もそのまま30だと更新されいます。
ReferencesはPointerより、簡単に使える・データタイプの保護のメリットがあります。
Pointersのように^のOperatorを使わなくても大丈夫ですし、違うデータタイプの変数を参照しようとするとコンパイルエラーが出ます。
__ISVALIDREF()
そしてReferenceの参照が有効かどうかをCheckする関数もあります。
check:=__ISVALIDREF(nRef);
もし参照有効ならTrueが戻ります。References使用する前に常にCheckするのがよいでしょう。無効なReferencesを使うとPLCが止まってしまいますので。
ReferencesはFunctions/Functions Blocksのパラメータとしてよく見られています。特に大きなデータを引き数としてBlocksの中に入れるときはよく使います。そうするとMemoryの節約できますから(簡単にいうとReferencesにすると変数のアドレスを入れて参照するので、そのまま1000長さの実数配列を引数としていれると1000長さの実数配列を”COPY”してBlocksにの中に使うことになる。)
はーい、お疲れ様です。