スクリプトガイド > JSLの構成要素 > 名前解決のルール > 名前解決に関するよくある質問
公開日: 04/01/2021

名前解決に関するよくある質問

適用範囲(スコープ)を指定する必要がありますか。

はい。迷った場合は、適用範囲(スコープ)を指定してください。特に、多くの人がさまざまなデータテーブルとともに使う可能性があるスクリプトでは、必ず適用範囲を指定してください。気づかないで、同じ名前を2つのコンテキストで使用している場合(たとえば、データ列と同じ名前のグローバル変数を定義する、など)があるからです。

そのようなスクリプトを書く場合は、適用範囲と名前空間を明確に指定してください。高度な適用範囲指定と名前空間を参照してください。

接頭スコープ演算子は、いったん解決された後は、実行時オーバーヘッドがかかりません。二項スコープ演算子は、常に、実行時オーバーヘッドがかかります。

名前(グローバル変数)によって参照される列と、直接列名を指定する場合の違いは何ですか。グローバル変数によって列を参照する場合、どのようにその列のセルに値を割り当てるのでしょうか。

列を参照すると、列の特定の属性を変更するメッセージや、その値(セルの色付けや計算式の設定など)にアクセスするメッセージを送ることができます。

グローバル変数に列が割り当てられている場合は、添え字を使って列内のセルに値を割り当てます。列名「身長(インチ)」が変数xに割り当てられているとします。

x = Column( "身長(インチ)" );

「身長(インチ)」列の3行目に、次のように値を割り当てます。

x[3] = 64 // 身長の3行目の値を64に設定する

JSLスクリプトの現在行は、行を選択することや行にカーソルを置くことで決定されるのではありません。現在行は、デフォルトではゼロ(行なし)になっています。Row()(たとえば、Row() = 3)で現在行を設定することができます。このような設定はそのスクリプトが実行されている間だけ有効で、スクリプトの実行が終了すると、Row()はデフォルトの値ゼロに戻ります。そのため、一度にスクリプトすべてを実行したときと、一度に数行ずつスクリプトを実行したときとでは、異なる結果になる場合があることに注意してください。

スクリプトの現在の行を設定するもう1つの方法は、For Each Row()で囲む方法です。これは、現在のデータテーブルの行ごとにスクリプトを1回ずつ実行します。例として、Ifを参照してください。データテーブルの操作方法については、データテーブルを参照してください。

スコープ演算子を使う場合、":"と"[ ]"でどちらの方が優先されますか。

スコープ演算子(:)は、添え字([])より前に評価されます。これは、次の2つの行が等価であることを示します。

dataTable:colName[i]
(dataTable:colName)[i]
より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).