jsmodeに名前空間のNo.11702
こみやんま さん 24/06/12 12:52
 
JavaScriptのjsmodeのところのヘルプの記述...

■jsmodeと名前空間の必要性が高いことをちゃんと記載した方がよいかと

 jsmodeと実行空間まわりの記述ですが、今のヘルプの感じだと、
 「好きな人は付ければいいんじゃないですか? 付けないのが普通で、付けるのは
好みです」くらいのテイストに一見見えますが、
  もっとハッキリと「名前空間はちゃんと付けて! 原則、何も考えずユニークな
名称を付けて!」
  ぐらいのスタンスで解説した方がよいかと思います。

 「名前空間を付けておかないと、他のマクロと干渉して動作しなくなりますよ?」
といった趣旨、
 (例で理解してもらうのが難しいと思えば、「原則、とにかくユニークな名前でも
GUIDでもなんでもいいから、付けて」の1点張りで良いかと)



■特に初学者ほど「変数名・関数名」をサンプルや他者マクロそのままにコピペしや
すい

 初学者ほど、ヘルプのマクロの簡易な変数名・簡易な関数名や、他者のマクロその
まま利用する傾向があります。
 同じ変数名、同じ関数名を使うと、a.mac の後、b.mac を実行すると、a.mac の定
義してあったものが、
 上書きされて壊れるという怖さを本当の意味で理解できる人は少ないかと思います。
 
  (通常ユーザーが触れるJavaScript、あるいは、初学者が書くようなスクリプト言
語の層ではそのようなことは意識しなくてよくなっているため)

  JavaScriptに限らず、
  ・「Aのスクリプト実行」と「Bのスクリプト実行」が「同じ定義空間で実行され
ている」
  ・「Aのスクリプト1回目」と、「Aのスクリプト2回目」が「同じ定義空間で実行
されている」
 は、中級者以上でないと「それがどんな破壊をもたらすのか?」理解できないかと
思います。



■理解がある人でも、変数名・関数名は同じになる傾向がある
 「作成者」が同じなら、違うマクロでも、「同じような役割」のものに、同じ変数
名や同じ関数名を付けやすい
 このような「当人のマクロが増えれば増えるほど」、(同じファイルに対して、複
数のマクロを実行する可能性が上がっていくので)
 当人のマクロ同志で壊しあう可能性がどんどん上がっていく。


■非同期が結構あるのが危険度を高めすい

 同期しかなければ、通常の秀丸マクロとは大きく変わらないため、実質的な被害が
起きる可能性が結構低く抑えることができますが、
 (変数や関数の「未定義・定義」の違いを前提に挙動を変えている場合だけ影響)

 非同期だと、どうしてもなんらかの関数や変数を常時参照しているタイプの書き方
が多くなりますので、
 名前空間を付けないままマクロを量産していると、いつか壊れるだろなぁと。


■数が少ないから露見していないだけで、
 数が増えたら「なんかたまに壊れるんです」となるのは結構目に見えてます。
 (しかも外野から見た際の解決が相当に難しい。マクロ単体だとどこまでいっても
正しいから)



■ 私もマクロライブラリに jsmode "WebView2\\*****" とはっきりと名前空間を定
義していないのをアップしてしまって
 しくったという思いですが、
 (更新した際には全部名前空間付けましたが...)

[ ]
RE:11702 jsmodeに名前空間のNo.11703
秀丸担当 さん 24/06/12 16:36
 
確かに名前空間的なことは注意が必要です。
コンテンツ単位の存在はhtmlのjavascriptとだいたい同じ考えです。(こみさんまさ
んはご存知ですが)
普通の一発の実行で完了するものであればそれほど問題にはならないと思います。
非同期で呼ばれるものがある場合は、名前空間を指定したほうがいいです。そのあた
りサンプルなどにも書いておこうと思います。

ちなみに秀丸マクロはもともと設定の依存性があって、簡単に書いたマクロは誰しも
の環境で正確に動くわけではなく、「マクロの設定依存性について」のところをよく
考えないといけないということがあったりします。

[ ]
RE:11703 jsmodeに名前空間のNo.11704
こみやんま さん 24/06/13 12:41
 
>非同期で呼ばれるものがある場合は、名前空間を指定したほうがいいです。そのあ
>たりサンプルなどにも書いておこうと思います。

@ jsmode "JScript\\" + currentmacrofilename;

とか

A jsmode "WebView2\\" + currentmacrofilename;

とか、あるいは@略記の

B jsmode "\\" + currentmacrofilename;

あたりがよさそうですね。
(Bは担当さんが好む書き方?)

よく理解されずにコピペされても、
そのコピペされたこと自体がちゃんとプラスに働くという点でもw

[ ]
RE:11703 jsmodeに名前空間のNo.11709
こみやんま さん 24/06/14 04:47
 


β9で、ヘルプの何か所かに currentmacrofilename を使った例が追加されているよ
うですが、
肝心のjsmodeのところで解説されていないので、記述の意味がわからない人が理解す
ることができないかと思います。

というか jsmode "\\" + currentmacrofilename; という記述がわからなかったら人は
jsmode の項目を調べるので、ヘルプファイルの
250_JavaScript_jsmode.html
に相当する箇所で説明されている必要があるかと。



■例にWebView2を足した方がよさそう
```

jsmode "JScript\\myspace";
js{
  its = "mine";
}

jsmode "JScript\\orespace";
js{
  its = "oreno";
}

jsmode "JScript\\myspace"; // 一番上と「エンジン\スコープ(名前空間)」が同じ
js{
  message(its); //"mine"
}

jsmode "WebView2\\myspace"; // ← これは足したほうがいいかもしれない
js{
  its = "watashi";
}
```


■スクリプトエンジン「だけ」を省略すると、JScriptになるということを足す

スクリプトエンジンを省略し、\の後ろのスコープだけを記述した場合には、スクリ
プトエンジンにJScriptを指定したこととなります。

```
jsmode "JScript\\myspace";
js{
  its = "mine";
}

jsmode "\\myspace"; // "JScript\\myspace" と同じ意味
js{
  message(its); // "mine"
}
```



■スコープの部分(myspace)の部分は、他と被らないものを付けるのが良く、一番手
軽なのがcurrentmacrofilename ということを足す

スコープ(名前空間)は他と被らないものを付けるのが好ましく
実行するマクロファイル名 currentmacrofilename はこの点で使い勝手が良いです。


```
jsmode "JScript\\" + currentmacrofilename; // こうすれば、他のマクロとスコー
プが被らない
js{
  its = "mine";
}

jsmode "\\" + currentmacrofilename;
js{
  message(its); // "mine"
}

jsmode "WebView2" + currentmacrofilename;
js{
  its = "watashi";
}
```


みたいな感じとか。


このくらいは段階を追わないと、ちとわからんかと思います。

[ ]
RE:11709 jsmodeに名前空間のNo.11710
秀丸担当 さん 24/06/14 14:22
 
いろいろご指摘ありがとうございます。
参考にさせていただきます。

[ ]