他のいくつかのプログラミング言語は、デフォルトでグローバル環境ではなくローカルの名前空間/環境を使用します。 JMP 専門家は、通常、他の JMP スクリプトとの衝突を避けるために新しいスクリプトにはローカル名前空間が適切であるため、スクリプトを作成するときは常に NamesDefaultToHere(1) が BKM であると述べています。 スクリプトをグローバル名前空間に入れたい場合は、すべてのスクリプトを「true」引数で定義するよりも、NamesDefaultToHere(0) を定義する方が便利です。
こんにちは@cnatrass 、 提案ありがとう! お客様のご要望を承知し、検討させていただきます。
私の意見では、デフォルトとして Global 名前空間を使用することは、設計上の決定としては非常に不適切です。ただし、以前のバージョンの JMP で記述された JSL スクリプトとの下位互換性のために必要である可能性があることは理解しています。
新しい JSL コードを作成する人は、複数のスクリプトと変数名の衝突が原因で、デバッグが難しい奇妙なことが起こり始めたときに、このことについて苦労して学ぶと思います。特に、グローバル名前空間で以前に実行されたスクリプトによって残された残骸が原因です。変数は JSL で宣言する必要がなく、グローバル名前空間がデフォルトであるため、予期しない値がスクリプトに侵入しないようにするために、スクリプトの先頭ですべての変数を空の状態に初期化することが絶対に重要であると考えています。混乱と騒乱。
もちろん、次のようにするのも良い習慣です。名前のデフォルトはここ(1)です。これまでに書かれたすべての JSL スクリプトの先頭に、どこでも、常に、スクリプト以外の場所にニーズ何らかの奇妙な理由でグローバル名前空間を使用するためです。このような状況でも、デフォルトの名前空間を Local に設定し、すべての Global 変数をグローバル名前空間として明示的に参照する方がよいと感じます。 ::グローバル名構文。したがって、下位互換性のためにデフォルトのグローバル名前空間が本当に必要な場合は、スクリプトエディタに常に挿入するオプションを持たせる必要があります。名前のデフォルトはここ(1)です。コーダーが毎回これを覚えて入力する必要がなく、すべての新しいスクリプトの先頭に配置されます。 。
これらの予防措置を講じたとしても、衝突が発生するというエッジケースに遭遇することがあります。たとえば、合計そして製品関数には、という名前の暗黙変数が含まれます。私デフォルトでは。すでにデフォルトのローカル名前空間を設定しているスクリプト内で使用する場合には問題ありません。しかし、列の数式はどうなるでしょうか?まさにそれがスクリプトであるにもかかわらず、私は通常、列式をスクリプトとして考えません。GUI 数式エディタを使用してグラフィカルに編集します。それは一度も頭をよぎったことはありませんでした。
さて、初めて使ったのですが、合計列の数式で、ローカル名前空間を設定するのを忘れたテーブル スクリプトを実行してしまいました。のためにイテレータを次のようにループします私。当然のことながら、これは混乱と騒乱を引き起こしました。アプリケーションが応答しなくなり、無限ループに陥ったため、タスクを強制終了する必要がありました。それから、私はそれをさらに数回試みなければならなかったが、最終的に自分が犯した恐ろしい、あいまいな間違いが、その者によって仕掛けられた罠によって煽られたものであることに気づくことができた。合計の有害なグローバル私イテレーター。簡単に言うと、列数式でもスクリプト エディターをダブルクリックして、名前のデフォルトはここ(1)です。 。これがなければスクリプトは安全ではありません。