fluorite12はJavaScript上での動作をサポートしています。
JavaScript側のオブジェクトは、 JS_OBJECT
クラスで表現されます。
関数呼び出しなどいくつかの状況では、fluorite12とJavaScriptの間で自動的に変換が行われます。
変換元 fluorite12 |
変換先 JavaScript |
---|---|
JS_OBJECT |
そのままの値 |
INT |
Number |
DOUBLE |
Number |
STRING |
String |
BOOLEAN |
Boolean |
ARRAY |
Array |
NULL |
null |
FUNCTION |
Function |
それ以外 | 非対応による例外 |
変換元 JavaScript |
変換先 fluorite12 |
---|---|
そのままの値 | JS_OBJECT |
整数 Number |
INT |
小数 Number |
DOUBLE |
String |
STRING |
Boolean |
BOOLEAN |
Array |
ARRAY |
null |
NULL |
undefined |
NULL |
それ以外 | JS_OBJECT |
JavaScriptの関数は、fluorite12の関数のように呼び出すことができます。
引数と戻り値の間で暗黙の型変換が行われます。
js_object.property
によってJavaScriptのプロパティを取得できます。
js_object.property = value
によって代入もできます。
どちらも暗黙の型変換が行われます。
obj := JS('({a: 100})')
obj.b = obj.a + 23
obj.b
# 123
js_object::method(arguments)
によってJavaScriptオブジェクトのメソッドを呼び出すことができます。
引数および戻り値は暗黙の型変換が行われます。
date := JS("new Date(946652400000)")
date::getFullYear()
# 2000
JavaScript版fluorite12でのみ利用可能な定数および関数です。
JS_OBJECT
JavaScriptオブジェクトのクラスJS_OBJECT
はJavaScriptのオブジェクト全般を表すクラスです。
::new(arguments)
JavaScriptコンストラクターの呼び出しjsObject::new(argument: VALUE; ...): JS_OBJECT
JavaScriptの関数オブジェクトをコンストラクタとして呼び出します。
各引数および戻り値は暗黙の型変換が行われます。
Basket := JS(%>
function Basket(item) {
this.item = item
}
Basket.prototype.toString = function() {
return "Basket[" + this.item + "]";
}
Basket;
<%)
Basket::new("apple")
# Basket[apple]
OUT
コンソールに出力OUT(value: VALUE): NULL
値をWebアプリケーションごとに決められた出力欄に出力します。
WINDOW
windowオブジェクトの取得WINDOW: JS_OBJECT | NULL
その実行環境から参照可能である場合、windowオブジェクトを返します。
JS
JavaScriptコードの実行JS(code: STRING): VALUE
第1引数のJavaScriptコードを実行します。
戻り値は暗黙の型変換が行われます。
JS('1 + 2')
# 3
JS('(function(a, b) {
return a + b;
})(1, 2)')
# 3
ASYNC
非同期関数の生成ASYNC(function: FUNCTION): JS_OBJECT
第1引数のfluorite12関数をJavaScriptのasync関数に変換します。
通常、fluorite12の関数は暗黙の型変換によって非asyncなJavaScript関数に変換されます。
この関数を使うことで明示的にasync関数を生成することができます。
AWAIT(JS("Promise")::new(ASYNC(callback -> (
SLEEP(100)
callback(123)
))))
# 123
AWAIT
Promiseの結果の取得AWAIT(promise: JS_OBJECT): VALUE
第1引数のPromiseの結果をサスペンドして所得します。
結果は暗黙の型変換が行われます。
Promiseはコンストラクタで明示的に生成するほか、async関数の呼び出しでも生成されます。
promise := JS('new Promise(callback => callback("apple"))')
AWAIT(promise)
# apple
async_function := JS('async () => "apple"')
promise := async_function()
AWAIT(promise)
# apple