Rhino
About 1 min
Rhino
JavaScriptインタープリタのJavaによる実装。Mozilla製。Androidでもインタープリタモードなら動きそう。EmbeddedLang
- mozilla/rhino: Rhino is an open-source implementation of JavaScript written entirely in Java 公式
- rhino/it-android/README.md at master · mozilla/rhino 公式でAndroidのテストが入っている
- Rhino ES2015/ES6, ES2016 and ES2017 support サポート状況
- async-awaitは無いっぽい Support ES2017 async (arrow) functions & “await” · Issue #395 · mozilla/rhino
- arrow関数はあるか
- rhino/rhino/src/test/java/org/mozilla/javascript/tests/ContinuationsApiTest.java at 96d264acd2df85ad685ecdc4f059b4413f99faeb · mozilla/rhino 中断はできそう。
- ShabdVasudeva/OneUI-Gallery-Clone Androidで使ってるアプリで現在でも動きそうなもの
- oracle/graaljs: GraalJS – A high-performance, ECMAScript compliant, and embeddable JavaScript runtime for Java GraalJSはRhinoより新しいJSで動くとの事でESMとかもサポートしているらしくAndroidでも動くと言っているが、良くわからん。
使ってみたらあっさり動いて中断とか再開も出来るので気にった。使っていこう>AshX, Rhinocs
Objectリテラルのメソッド(は使える)
昔ながらのprototypeとか書いていて、シングルトンはこんな事する必要無いよなぁ、とCopilotにオブジェクトリテラルに直してもらったら、 アロー関数のthisは呼び出しもとだ、とか言われて、method定義に直された。
あれ?Rhinoってメソッド使えたっけ?と調べると使える>Rhino ES2015/ES6, ES2016 and ES2017 support
なおclassキーワードは使えない。asyncは使えないがgeneratorは使えたり、何が使えるかちょっと曖昧だよなぁ。
でもObjectのメソッドはもう使えない環境は無さそうだから積極的に使っていった方がいいな。
docstringのメモ
describe-function的なものを実装するために、なんかdocstringみたいなの無い?とgeminiに聞いたら以下を教えてくれたので貼っておく。
function getDocstring(fn) {
var fnSource = fn.toString();
// 関数の最初にある /** ... */ または /* ... */ のブロックコメントを抽出する正規表現
var match = fnSource.match(/^function\s*.*?\s*\(\s*.*?\s*\)\s*\{\s*(\/\*\*[\s\S]*?\*\/|\/\*[\s\S]*?\*\/)/);
if (match && match[1]) {
// コメント内のアスタリスクや無駄な改行を綺麗に掃除する
return match[1]
.replace(/^\/\*\*|^\/\*|\*\/$/g, '') // デリミタの削除
.replace(/^\s*\*\s?/mg, '') // 行頭の「 * 」の削除
.trim();
}
return null;
}
// --- 使い方 ---
function myAppFunction(x, y) {
/**
* 2つの数値を加算する関数です。
* @param {number} x - 最初の数値
* @param {number} y - 2番目の数値
* @returns {number} 計算結果
*/
return x + y;
}
var doc = getDocstring(myAppFunction);
print(doc);
// 出力:
// 2つの数値を加算する関数です。
// @param {number} x - 最初の数値
// @param {number} y - 2番目の数値
// @returns {number} 計算結果