C++ プログラマーのための JSL ガイド
問題
C++ について多少の知識があり、C++ オブジェクトとは何かについてある程度の知識があり、JMP のスクリプト言語について 20 分間の入門が必要な場合。
解決
- [ヘルプ] メニューに JMP スクリプトの索引があります。 関数、DisplayBox、およびオブジェクトをまとめて、または個別に説明します。 さらに深く掘り下げるときは、それが提供する検索を使用してください。
- JSL には型付き変数がありません。 double、float、int、または bool を宣言する方法はありません。 JSL 変数は、通常は数値、行列、またはリストですが、DisplayBox、Expression、Function、または Object の場合もあります。
- テストとループ (for、while、if) のための C 言語の制御構造は、C で呼び出すことができる関数とは大きく異なります。 for ステートメントは C コンパイラが理解するものですが、print ステートメントは C ランタイムが理解するものです。 JSL は異なります。JSL の for ステートメントは、JSL の if ステートメントや JSL の while ステートメントと同様に、実際には関数です。 JSL の for ステートメントを実行する関数は「for」という名前で、コンマで区切られた 4 つの引数を取ります (関数に期待されるように)。
for( icount = 1, icount <= 10, icount += 1, print( icount ); wait(1); );
- これは C の for ループに似ていますが、厄介なコンマ/セミコロンの問題が少なくとも 1 回発生します。 4 番目の引数は、10 回実行される JSL 式であることに注意してください。 また、ループは 1 から始まり、<= 10 まで続くことに注意してください。 C では、ほぼ確実に 0 から開始し、< 10 で停止します...sae 反復回数ですが、0 ベースです。 JMP は 1 ベースを優先します。 JSL のほとんどすべてのインデックスは 1 ベースです (FORTRAN のことは忘れてしまいました)。 JSL if ステートメントは「if」という名前の関数であり、少なくとも 2 つの引数を取ります。
if( a < b
, // comma
print("a is less than b"); x=9;
, // comma
c < d
, // comma
print("c is less than d"); x=10;
, // comma
print("a is not < b and c is not < d"); x=11;
);
- これは、関数が受け入れる完全なパターンを示しているという理由だけで、複雑に見えます。 第 2 引数以降はどこでも停止できます。 JSL の while ステートメントも関数 ("while" という名前) であり、2 つの引数を取ります。
- 式は、JSL がその力を発揮する場所です。 式は JSL の一部であり、おそらく for 関数の 4 番目の引数または while ステートメントの 2 番目の引数です。 式が変数にある場合は、関数に渡すか、評価するか、検査して操作することができます。 JSLには、文字列値を式に変換する「parse」という名前の関数があります。
- JSL 行列、リスト、および連想配列は、高レベルのコンテナー オブジェクトです。多くの場合、どちらを使用するか、またはデータ テーブルを使用するかどうかは、興味深い設計上の選択となります。 それぞれに、さまざまなジョブの弱点と強みがあります。
- データ テーブル (または複数のテーブル) は、JSL で使用できるオブジェクトです。 forEachRow( expression ) ステートメント (または関数 ... すべてが JSL の関数です) を使用して、単一のテーブルを処理できます。 複数のテーブルでは、JSL 変数を使用してさまざまなデータ テーブル オブジェクトを参照し、それらにメッセージを送信する必要があります。 JSL メッセージは、 << send 演算子を使用してオブジェクトに送信されます。
dt = open("$sample_data/big class.jmp");
dt << sort( by(height) );
- 「ソート」メッセージまたはメソッドは、データ テーブルが処理方法を認識している多くのメッセージの 1 つにすぎません。 ポイント 1 のスクリプト インデックスを思い出してください。すべてのメッセージをリストし、通常は例を示します。 データ テーブルは、Distribution などのオープン プラットフォームへの要求も処理します。 JSL プラットフォームは、スクリプト言語を使用して連結できる大きな便利なサブルーチンのようなものだと考えてください。あなたの目標は、プラットフォームに大変な作業をさせ (C++ で書かれているため、非常に高速です)、プレゼンテーションを調整するためだけに JSL スクリプトを使用することです。 (本当に正当な理由がない限り、独自の分布グラフを JSL で記述しないでください!)
- JSL のプレゼンテーション、グラフ、テーブル、出力は、通常はウィンドウに表示されるネストされた DisplayBox から構築されます。 DisplayBox は特別な種類のオブジェクトです (スクリプト インデックスで特別に扱われます)。カスタム ディスプレイをゼロから作成したり、プラットフォーム (Distribution など) から作成されたディスプレイを使用したりできます。 多くのプラットフォームでは、添字によってアクセスできるディスプレイボックス ツリーに出力があります。
- JSL には、ファイル全体をメモリに移動したり、ディスクに戻したりする関数 LoadTextFile と SaveTextFile があります。 一度に数バイトの読み取り/書き込みはありません。
- JSLには、JSLのファイルを読み込んで実行するインクルード機能があります。
- JSLには、「関数」関数によってコンパイルされたユーザー作成関数があります。
- JSL には、大規模なプロジェクトを作成するときに大いに役立つローカル変数があります。 デフォルトでは、変数はグローバルであり、これは小規模なプロジェクトや独自のテストに適していますが、ネストされたループで初めて "i" を再利用する場合は、ローカル変数を調べるときが来るかもしれません。
Re: C++ プログラマーのための JSL ガイドありがとう! スクリプト インデックスは、getProperties が返すのと同じ情報から構築され、一般的なケースの例で強化されています。 また、例がもっとあればいいのにと思います。 この言語には、本でよりよくカバーされるオブジェクトのプロパティではない機能もあります。 JMP は過去 N 回のリリースで改善され、ログに生成されるメッセージが改善され、場合によっては使用情報も含まれるようになりました。
ドキュメント、テクニカル サポート、および開発チームは、ドキュメントの追加/改善/改善が必要な点についてコメントをお待ちしております。 技術サポートを利用することで、確実に追跡できます。
@sheila_loring @shannon_conners @ウェンディ_マーフリー@ザングレッグ
Re: C++ プログラマーのための JSL ガイドScirpting インデックスに関する注意: これは、統合されたスクリプト ウィンドウとカスタマイズ可能な例を備えた、非常に強力なツールです。
しかし、私が少し難しいと感じたのは、包括的な構文索引がないことです。 JMP には JSL 構文リファレンスと呼ばれる PDF ブックが含まれていますが、100% 包括的ではありません。 関数またはメッセージのすべての引数の構文が常に見つかるとは限りません。 多くの場合、<<プロパティを取得してログに表示するなどのメッセージを使用する必要があります。
これについては、JMP のウィッシュリストに提案があります。