2013/06/01更新

プロデルで扱うことができる値には、大きく次の2種類あります。

  • 値型
  • オブジェクト型

値型

値型には、次の型があります。

  • 固定小数
  • 長整数
  • 整数
  • 浮動小数
  • 倍浮動小数

これらの値型は、格納できる値の範囲や使用するメモリ容量が異なります。

値型名 格納できる値の範囲 ビット数
整数 -2,147,483,648~2,147,483,647 32
長整数 -9,223,372,036,854,775,808~9,223,372,036,854,775,807 64
浮動小数 約7桁 32
倍浮動小数 約15~16桁 64
固定小数 約28~29桁 128

なお、これらの型をまとめて数値型と呼ぶことがあります。
また、プロデル内部で値型は、1つの変数または1つの式評価ごとにオブジェクト型にボクシングされるため、実際に使用されるメモリ容量はこのビット数よりも多くなります。

値型は、変数に代入するときに値だけがコピーされます。
手順呼び出しの際に値型の変数を指定した場合は、値渡しになります。

値型の定数

プログラムで具体的な数字(リテラル)を指定すると、プロデルが解析時にその数値を格納できる型に調整します。

 

オブジェクト型

「作る」命令によって作られた「種類」のインスタンスは、すべてオブジェクト型です。

オブジェクト型は、変数に代入するときにオブジェクトへの参照がコピーされます。

手順呼び出しの際にオブジェクト型を指定した場合は、参照渡しになります。

値の変換

値型の場合で、型が異なる変数に代入しようとすると、自動的に(暗黙的に)値の変換が行われます。

例えば次のプログラムでは、1.5が代入されている浮動小数である【値1】を、整数である【値2】へ代入しています。

【値1:浮動小数】は、1.5
【値2:整数】は、値1
値2を表示する

値1と値2は型が異なるため、値1を値2へ代入するときに、値変換が行われます。
具体的には、小数部分が切り捨てられて、1.5から1へ値変換されます。小数は四捨五入されません。

プロデルでは、変換前後の型に関係なく、すべて自動的に変換されます。
値変換の時に、変換前の値が、変換後の範囲に収まらない場合は、切り捨てられるか正しく変換されないことがあります。

  整数へ 長整数へ 浮動小数へ 倍浮動小数へ 固定小数へ
整数から -
長整数から -
浮動小数から 切り捨て 切り捨て -
倍浮動小数から 切り捨て 切り捨て -
固定小数から 切り捨て 切り捨て -

○=正しく変換されます △=変換後の範囲に収まる場合は正しく変換されます
切り捨て=小数が切り捨てられます

文字列との変換

数値型の値を文字列型の変数へ代入する時には、数値型が数字に変換されて文字列となります。

文字列型の値を数値型の変数へ代入する時には、文字列である数字が数値に変換されて数値型の値となります。

値変換の誤差

コンピュータの性質上、計算を行う際にわずかな計算誤差が生まれることがあります。

例えば、次のようなプログラムを実行すると、
本来は0.1と表示されるべきところが0.1000061と誤った結果になります。

295.5-295.4を表示する

この現象は、プロデルの不具合ではなく、小数点を含む数値をメモリ上に格納する際に起こります。
このような時は、計算誤差が生じる可能性が少ない、
固定小数型の変数に代入してから計算すると、誤差を回避できます。

【値1:固定小数】は、295.5
【値2:固定小数】は、295.4
値1-値2を表示する

なお、整数型ではこのような誤差は発生しないため、10倍した値を整数型として格納しておき、必要に応じて1/10にすると言った工夫も考えられます。

変数

変数は、宣言すると

型宣言すると、その型以外の値を入れられません。

変数名

プロデルでは、英数字について大文字・小文字、全角と半角を区別しません。
次のように「全角小文字のa」と「半角大文字のA」は、同じ変数として扱われます。

a=10
Aを報告