[ 新規に投稿する ]

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 [ コメントを投稿する ]
  いろいろご指摘ありがとうございます。
参考にさせていただきます。
[ ]

[ 新規に投稿する ]