プロデル1.5.636では、値型種類に対応し、構造体が追加されました。また、以前は擬似的に実現していた整数などの種類についても値型として実装しなおしメモリ効率が改善されました。
値型とは
値型は、変数に代入すると、その内容がその都度コピーされる型です。
値型の例を次のプログラムで説明します。まず値1に整数10を入れます。2行目では値2へ値1を代入します。この際に、値型である整数では、値1の内容が値2にコピーします。値2に代入される時に値1の内容がコピーされますので、代入後に値1の内容を変えても、値2には影響がありません。
値1は、10 値2は、値1 値1は、20 値1を報告する
これまでプロデルは、「整数」「真偽値」などについては参照型種類を擬似的な値型として再現して対応していましたが、最新版ではすべて完全な値型となりました。値型は参照型よりもメモリの使用量が少なくて済み、生成の時間も短いため、処理効率が良くなりました。
値型種類と参照型種類の違い
一方、通常の「種類」は「参照型種類」と読んで区別します。参照型種類は、「作る」文でオブジェクトがメモリ上に生成されます。生成したオブジェクトを別の変数に代入しても、オブジェクトは内容はコピーされず、変数名を問わず常に同じオブジェクトに対しての操作となります。
配列は参照型種類です。参照型種類の特徴を配列を使った次のプログラムで説明します。まず値1に配列定数を代入しています。配列定数では配列のオブジェクトが生成されます。次に2行目で、値2へ値1を代入します。この時参照型ではオブジェクトがあるメモリ上の場所だけがコピーされます。つまり値と値2は、メモリ上の同じ位置にあるオブジェクトを参照しています。そのため、値1と値2は、同じ配列を操作していることになります。
さらに3行目で、値2の2番目の値を変えてみます。その後で値1を確認すると、値2と同じように配列の内容が書き換わっていることがわかります。
値1は、{1,2,3} 値2は、値1 値2の2番目は、20 値1を報告する
なお、配列の場合、配列の内容そのものをコピーしたい場合には「クローン」設定項目を使います。「クローン」設定項目を使うと、新しい配列オブジェクトが作られます。
値2は、値1のクローン
このように値型と参照型では、変数へ代入する時に、内容そのものを代入するか、単にオブジェクトのメモリ上の場所を代入するかの違いがあります。
構造体(値型種類)
前置きの説明が長くなってしまいましたが、最新版では、値型種類として「整数」「真偽値」などに加えて、構造体の「座標」「サイズ」「矩形」種類が追加されました。これらの種類は、値型の特徴がある他は、普通の種類(参照型種類)と変わりません。
追加された値型種類は、主にウィンドウ部品の「大きさ」「位置」「位置と大きさ」設定項目の値で使用されます。これらの設定項目の結果から、「幅」や「横」設定項目など特定の値を調べられるようになりました。
窓の大きさの幅を報告する 窓の大きさの高さを報告する
なお、設定項目から得られた値型種類は、設定項目から取得した時点で情報がコピーされています。そのために、例えば「窓の大きさの幅は、100」と言ったように、特定の値だけを設定することはできません。幅を変更したい場合は、これまで同様に「窓の大きさは、{100,100}」といったように設定項目の大きさすべてを代入する必要があります。
「座標」「サイズ」「矩形」種類は、「作る」文を使って、作ることもできます。各種類には、比較のための手順も定義されているため、「もし」文を使った座標判定を短く簡潔に書けます。
枠Aという矩形(10,10,100,100)を作る 枠Bという矩形(50,50,50,50)を作る 枠Cという矩形(50,150,100,100)を作る 点1という座標(60,60)を作る 点2という座標(5,5)を作る 枠Aに枠Bが含まれるかどうかを報告する 枠Cが枠Aを含むかどうかを報告する 枠Aに点1があるかどうかを報告する 枠Aに点2があるかどうかを報告する
プロデル1.5.636以降での変更点
プロデル1.5.636より前は、ウィンドウ部品の「大きさ」「位置」「位置と大きさ」設定項目の型が配列型でした。636以降は、配列の代わりに「座標」「サイズ」「矩形」種類が使われます。
互換性を維持するためにこれらの値型種類では、自動的に配列へ変換したり、配列からこれらの値型種類へ変換できるようになっています。ただウィンドウ部品の設定項目の結果を、配列種類の手順や設定項目で操作する場合に、一部プログラムの書き換えが必要な場合がありますので注意してください。
「座標」「サイズ」「矩形」種類が追加されたことでゲームなど座標計算をよく使用するプログラムでより日本語らしくプログラムを書けるようになります。ぜひご活用ください。