しまった、忘れていた!
JXA は var キーワードとセミコロンは不要だった。
前回 macOS Sierra では JavaScript にて let が使えると書いた。
ならば let キーワードなら let で、無宣言なら var と同じで合っている?
というか本当に let の仕様どうりなのか?
ちゃっちゃと書いて試してみる。
#!/usr/bin/osascript // @ macOS Sierra // let Test let test1 = "let Keyword"; for (let i=0; i<2; i++) { let test1 = "for " + i; //console.log(test1); } console.log(test1); //=> let Keyword var test2 = "var Keyword"; for (let i=0; i<2; i++) { var test2 = "var " + i; //console.log(test2); } console.log(test2); //=> var 1 test3 = "No Keyword == var"; for (let i=0; i<2; i++) { test3 = "Null " + i; //console.log(test3); } console.log(test3); //=> Null 1
やはり。
let キーワードだとブロックの内側に左右されないと確認できた。
ついでに、最近知ったけど Swift の let キーワードって定数宣言なのね。
まぎらわしいよ、何故 const にしなかったのだろう?
そうそう、let は JavaScript 1.7 で追加されたキーワード。
JavaScript 1.7 にフル対応しているのかな?
つまり yield ジェネレーター等も使えるのだろうか。
JavaScript 1.7 の新機能 – JavaScript | MDN
#!/usr/bin/osascript // Generator Test function get_yield() { let ss = ["first", "second"]; yield ss[0]; yield ss[1]; } let g = get_yield() console.log(g.next()); console.log(g.next());
駄目だ、yield と書いた時点でエラーになる。
イテレータもエラー、Iterator 関数では何故かエラーにはならない。
どうやら 1.7 の一部に対応ということみたい。
まあ今後のバージョンアップで上記も対応してくれるだろう。
それと、少し話がズレるけど。
関数でタプル(配列)を戻す場合に Gjs と同じように取得できるように。
#!/usr/bin/osascript // Tuple Test function get_tuple() { return [1, 2, 3, "Daaaaaaaaaa!"]; } let [aaa, bbb, ccc, ddd] = get_tuple(); console.log(aaa); console.log(bbb); console.log(ccc); console.log(ddd);
地味に解りやすい。
ちなみに Gjs は全部問題なく 1.7 仕様が使える。
まあそりゃ実行エンジンが spidermonkey ですし。
V8 エンジンの Node.js はみんな var で書いているけどどうなんだろう?
機会が無くていまだに手を出していないんだけど。