データタイプ ■ 基本データタイプ 基本データタイプには、32ビット符号付き整数、文字列の2種類があります。 console.writeln(100); console.writeln(0x100); console.writeln("100"); console.writeln("じゅげむじゅげみごこうのぺけぺけあとはしらない"+ "じゅげむじゅげみごこうのぺけぺけあとはしらない"+ "じゅげむじゅげみごこうのぺけぺけあとはしらない"+ "じゅげむじゅげみごこうのぺけぺけあとはしらない"); ■ 複合データタイプ 基本データの集合を扱うための複合データタイプとして、配列、マップ、オブジェクトがあります。 var array; for(var i=0;i<10;++i) array[i] = i; for(i=0;i<10;++i) console.writeln("array[" + i + "] = " + i);後でもう一度説明しますが、ViViScript の変数はルーズに型付けされいて、かつ配列、マップ、 オブジェクトの要素は動的にメモリが確保されるので、上記のような記述が可能です。ただし、 array[1000] = 1; を実行すると、その時点でインデックス0から1000までの領域が確保されるので、 安易に大きな添え字を使ってデータを設定しないようにしてください。またインデックスは0以上で、 マイナスの値(または 2^31 以上)は無視されます。 配列は数値でデータを指定しますが、文字列をキーにデータを参照するのがマップです。 連想記憶と呼ばれることもありますが、名前ほど大袈裟なものではありません。表記は配列と同じで、 カッコの中で数値ではなくキー文字列を指定します。 var map; map["name"] = "たけちゃん"; map["age"] = 33; var key = "name"; console.writeln("map[" + key + "] = " + map[key]); key = "age"; console.writeln("map[" + key + "] = " + map[key]); 実行結果: map[name] = たけちゃん map[age] = 33 オブジェクトはプロパティを持ちます。プロパティを参照する時はピリオドに続けてプロパティ名を指定します。 これは、マップと同じことの異なる表記ですが、(通常)マップはキーの値が実行時に決まるのに対し、 オブジェクトの場合はコンパイル時に決定しているところが異なります。 var map; map.name = "たけちゃん"; map.age = 33; console.writeln("map.name = " + map.name); console.writeln("map.age = " + map.age);この例の様に、オブジェクトのプロパティのインスタンスは実行時に動的生成されます (この言語仕様は JavaScript とは異なるので注意してください)。したがって、 function newPerson(name, age) // 新しいオブジェクトを生成する関数 { var person; // オブジェクトを生成 person.name = name; person.age = age; return person; // 生成したオブジェクトをリターン } function main() { var h = newPerson("はっしー", 29); var k = newPerson("すえつぐ", 36); console.writeln(h.name + "は" + h.age); console.writeln(k.name + "は" + k.age); }というプログラムが可能です。JavaScript の new と this を使ったプログラムよりすっきりしていると思いませんか? また、JavaScript のオブジェクトは常にポインタですが、ViViScript のオブジェクトは基本的に実体です。 従って、オブジェクトをコピーしたものを更新すると、JavaScript ではソースの方のデータも更新されますが、 ViViScript ではコピー先のみが更新されます。 var src, dst; src.prop = 1; dst = src; dst.prop = 2; console.writeln("src.prop = " + src.prop); console.writeln("dst.prop = " + dst.prop); の実行結果は以下のようになります。 src.prop = 1 dst.prop = 2 ■ 特殊タイプ 特殊タイプとしてドキュメント、ビューがあります。
ドキュメントはファイルから読み込んだメモリイメージそのものを表し、ビューはそのUI・表示形態です。
組み込み関数やメソッドによってはこれらのタイプのインスタンスを返します。
var doc = openDocument(); if( doc.isKindOf(7) ) { // ファイルをオープンした場合の処理 var pathName = doc.getPathName(); // オープンしたドキュメントのフルパスを取得 ..... } else { ..... // オープンしなかった場合の処理 } ■ タイプの判定isKindOf(type) メソッドでオブジェクトのクラスを判定することができます。 具体的に言えば、オブジェクトが整数なのか文字列なのか、それともドキュメントなのかを判定できます。 |