変数は動的型付けなので便利な点もありますが、不便な点もあります。
GML の扱う変数は実際にデータを代入するまで型が決定されておらず、最初は数値を記憶していた変数にあとから文字列を記憶させることもできます。変数をいきなり配列として扱うこともできます。
GML の変数は動的 (dynamic typing) に型が決定されるので、変数として最初に宣言して代入されたデータ型がプログラム終了までずっと同じデータ型で利用されるかについての保証は一切ありません。
コンパイラも型の不一致による演算をエラーとして検出せず、型の不一致に依るエラーはアプリケーションをビルドしてエラー箇所が実行されるまでエラーとして検出されません。
では実際にどのような型があるのか見てみましょう。
型 (type) | 日本語 | 詳細 |
---|---|---|
Strings | 文字列型 | 文字および文字列として |
Real Numbers | 実数型 | 有理数の全て、無理数の全てを含む |
Arrays | 配列 | 一次元および二次元配列まで |
Booleans | ブーリアン | true と false だが、GML の特殊仕様では定数と同じ(型としては存在しない) |
Pointers | ポインタ | メモリアドレスだが GMS では Buffer や Texture など特定の部分でのみ利用可能 |
Enums | 列挙型 | 定数のリストを定義できる特殊な変数型、グローバルとして機能する |
Undefined | 未定義/Null | まだ定義されていない、存在しないことを示す。データ構造とかにしか使えなくね?という疑問 |
データ型を調べる場合は関数を使って調べます。
なんか足りなくね?
Boolean を調べる手段が用意されていません。GML では概念だけで Boolean の型は存在しません。
Enums
はもともと定義も曖昧な型なので調べる意味がないから型判定は無くても良いのですが、Boolean は GMS の現在の仕様上、ブール型として調べる手段はありません。
定数である true
と false
は数値である 1
と 0
と等価です。
ここから抜粋
Note that currently GameMaker: Studio does not support “true” boolean values, and actually accepts any real number below 1 as a false value, and any real number equal to (or greater than) 1 as being true. This does not mean however that you should be checking 1 and 0 (or any other real number) for true and false, as you are also provided with the constants true and false which should always be used in your code to prevent any issues should real boolean data types be added in a future update.
ここまで抜粋
定数としての true
、false
は実数型の 1
、0
と区別が付きません。
現在の仕様だとブール型は実装されていないという事に成ります。
(true == 1)&&(false == 0)
これが成り立つけれど、
var a=true;
が ブール型なのかについては
var a=1;
も (a==true)
が成り立つので変数型としてのブール型は区別ができません。
参考 (YoYoGames):Data Types