スクリプト言語やプログラミング言語は、独自の構文規則を持っています。CやJavaといった言語でのプログラミングの経験がある人なら、JSLを見慣れた言語と感じるでしょう。ただし、JSLでは、記述ルールやスペースに関する規則が異なります。
以下の節で、基本的な要素のJSL構文規則を説明します。
JSLでは、ワードを括弧やカンマ、セミコロン、スペース、各種演算子(+、-など)で区切ります。この節では、区切り文字を使用するときの規則を説明します。
カンマは、リスト内の項目、行列内の行、関数の引数といったアイテムを区切ります。
my list = {1, 2, 3};
your list = List( 4, 5, 6) ;
my matrix = [3 2 1, 0 -1 -2];
If( Y < 20, X = Y );
Table Box( String Col Box( "年齢", a ) );
メモ: 複数のコマンドをつないで関数内の1つの引数とするには、各コマンドをセミコロンで区切ります。セミコロンを参照してください。
括弧は、JSL内でいくつかの目的を持ちます。
• 括弧は式の中の演算をグループ化します。次の括弧は、If()式内の演算をグループ化しています。
y = 10;
If(
Y < 20, X = Y,
X = 20
);
• 関数の引数を括弧で囲みます。次の例では、Open()関数の引数を括弧が囲んでいます。
Open( "$SAMPLE_DATA/Big Class.jmp" );
• 括弧は、引数が不要な場合でも、関数名の最後を示します。たとえば、Pi関数は引数を持ちません。しかし、JMPがPiを関数と識別するには括弧が必要です。
Pi();
メモ: 括弧は必ず対で使用してください。どの ( にも ) が必要です。対になっていない場合はエラーとなります。
スクリプトエディタでは、括弧(丸括弧、角括弧、大括弧)の対を確認することができます。スクリプト内の任意の場所にカーソルを置き、Ctrlキーを押しながら]を押します(macOSの場合はcommandキーを押しながらB)。スクリプトエディタが括弧を検索し、最初の開き括弧と閉じ括弧の間のテキストを強調表示します。次に上位の括弧を強調表示するには、このプロセスを繰り返します。例については、括弧の自動マッチを参照してください。
セミコロンで区切った式は連続して評価され、最後の式の結果が戻されます。次のコードでは、まず変数iに0が割り当てられ、次に変数jに2が割り当てられます。
i = 0;
j = 2;
セミコロンは、次のIf()式のように、カンマで区切られた引数をつなぐこともできます。
If( x < 5, y = 3; z++; );
他の言語では、式の終わりを表す文字としてセミコロンを使用します。JSLのセミコロンは、コマンドが続く可能性を示すものとして機能します。セミコロンで式を区切る方法については、式を結合する他の方法を参照してください。
スクリプトの最後、または一連の引数の最後にセミコロンをつけても問題ないので、セミコロンを終わりの文字と考えることもできます。一連のスクリプトの最後や、閉じ丸括弧または閉じ中括弧の後にセミコロンを付けることができます。実際、最後にセミコロンを付ける習慣をつけておくと、短いスクリプトを大きなスクリプトに貼り付ける際に間違いを避けることができます。
セミコロンと同じ機能を持つ関数はGlue()です。セミコロンとGlue()の詳細については、演算子を参照してください。
二重引用符はテキスト文字列を囲みます。スペースや大文字/小文字を含め、二重引用符内のすべてが入力したとおりに受け取られ、評価はされません。"Pi() ^ 2"を二重引用符で囲んだ場合、それは単なる文字の羅列であり、10に近い値を指すわけではないのです。
テキスト文字列の使用には十分な注意が必要です。二重引用符内のテキスト文字列は、ユーザの入力したとおり使用されるため、スペースや句読点も出力に影響します。
引用符付き文字列の中で二重引用符を使用する場合は、各二重引用符の前にエスケープシーケンス\!(バックスラッシュと感嘆符)を挿入します。たとえば、次のスクリプトを実行してウィンドウのタイトルを見てみましょう。
New Window( "\!"こんにちは\!" は引用符付き文字列です",
Text Box( Char( Repeat( "*", 70 ) ) )
);
\!b |
スペース |
\!t |
タブ |
\!r |
キャリッジリターンのみ |
\!n |
改行のみ |
\!N |
ホスト環境に適した改行文字を挿入1 |
\!f |
改ページ(ページ区切り) |
\!0 |
ヌル文字 メモ: ヌル文字は通常、文字列の終了とみなされるので、使用するのは危険です。ローマ字のOではなく、数値のゼロをタイプするよう注意してください。 |
\!\ |
円記号 |
\!" |
二重引用符 |
1 macOSでは、このエスケープシーケンスはCR(キャリッジリターン、16進数‘0D’)です。Windowsでは、このエスケープシーケンスはCR LF(キャリッジリターンとその後の改行、16進数‘0D0A’)です。
あるまとまった箇所で、エスケープ文字を何回も指定しなければならない場合があります。そのような場合は、\[...]を使用すれば、括弧内でエスケープシーケンスが不要(使用不可能)になります。次に、二重引用符文字列の中で\[...]を使用している例を示します。
jslPhrase = "これをJSLで実行するには、次のように記述します。\[
a = "hello";
b = a|| " world.";
Show(b);
]\そして、スクリプトを実行します。";
JSLでは、名前の中に空白文字を挿入することが許可されています。また、JSLワード内またはJSLワード間のスペース、タブ、改行、および空白行は無視されます。これは、ほとんどのJSLワードがユーザインターフェースから採用されており、これらのコマンドのほとんどにスペースが含まれているからです。たとえば、「モデルのあてはめ」プラットフォームのJSL式は、Fit Model()またはFitModel()のどちらでも動作します。
演算子内のスペース、および1つの数値内の桁間のスペースは許可されません。そのようなケースではエラーが生じます。たとえば、i++にある2つの+の間にスペースを入れたり(i+ +)、数値の途中にスペースを挿入したりすることはできません(4 3は43と同じではありません)。
メモ: JSLで名前の中に空白文字が使えるのはなぜでしょうか。理由のひとつは、JSLのコマンドやオプションにはJMPメニューやウィンドウにあるコマンドがそのまま使われていることです。また、データテーブルの列名によくスペースが使われることももうひとつの理由です。