# スクリプト

[スクリプトの編集] ダイアログ ダイアログを使用して作成および編集されたユーザ定義の JavaScript ソースコードを実行します。Script 関数には、その動作を定義する JavaScript ソースコード (.js ファイルとして保存および格納することが可能) が含まれています。ソースコードでは個々の Script 関数の動作のみを定義します。例えば、ジョブに複数の Script 関数がある場合、1 つの Script 関数で定義された変数は、その特定の Script 関数に対してのみ定義されており、ジョブのすべての Script 関数に対して定義されているわけではありません。

注 :

- 次の制限は、指定されたジョブで使用されるすべての Script 関数と外部スクリプトモジュールによって割り当てられるメモリに適用されます。

  - スクリプトメモリに割り当てられる最大バイト数の制限は 4 MB です。
  - スタックに割り当てられる最大バイト数の制限は 64 KB です。
- 不要なメモリの割り当てを避けるため、使用しない関数はすべてスクリプトから削除する必要があります (デフォルトのサンプルスクリプトで使用されていない関数など)。例えば、文字列オブジェクトを生成して表示する未使用のサンプルの draw 関数を含むスクリプトは、メモリと CPU サイクルを消費します。

- セルの実行を無効にした Script 関数の機能は、他のスプレッドシート関数とは異なります。一般に、他のスプレッドシート関数は、関数の実行後に記録された最後の値を保持します。無効になっている関数を参照する関数は、記録された最後の値を返します。ただし、Script 関数は内部の Run メソッドの実行を必要とするため、無効になっている Script 関数をロードすると、Script データ構造体が表示されますが、無効になっている関数を参照する Get 関数は #ERR を返します。これは、Get 関数は特定の戻り値を必要としているためです。この戻り値は、Script 関数が実行されなかったため返されません。

## スクリプト の入力

従来の In-Sight スプレッドシート関数とは異なり、Script 関数はさまざまな種類の入力引数 (1 ～ 100) を取ることができます。各引数は、セル参照、リテラル値、または次の値のタイプのいずれかを生成する式である必要があります。

- 数値
- 文字列
- 画像
- イベント
- 形状オブジェクト
- Binary データ構造体
- ブロブ、エッジ、ヒストグラム、または パターンVision Data Access functions などのデータ構造体
- Object または Array データ構造体 (別の Script 関数から返される)

注 :

- セル範囲を引数として指定すると、その範囲に含まれている個々のセル参照に拡張されるため、セル範囲に含まれている引数と同じ数の引数を消費します。
- Script 関数の引数が、Blob、Edges、Histogram、または Patterns データ構造体を返している別のセルへの参照である場合、Script 関数に渡されるオブジェクトは、Run メソッドが返されるまでの間のみ使用できます。Script 関数はこのオブジェクトを直接返すことができ、Script 関数を含むセルの結果値として使用することができます。ただし、スクリプトがこのオブジェクトを内部に保存する場合 (例えば、Draw メソッドで使用する場合など)、Run メソッドが返された後、オブジェクトは使用できなくなり、そのメソッドを呼び出そうとするとエラーになります。これは、Run メソッドによって返されるスクリプトオブジェクトのプロパティなど、スクリプトが Result 構造体を返す場合にも適用されます。例えば、これらのプロパティは、基になるオブジェクトが有効でなくなるため、Get 関数や他の Script 関数で使用することができません。

- スクリプトを作成する場合は、次の例のように、入力引数を検証するコードを含めるとエラーを減らすことができます。

                              function Tool()
      {
      }

      module.exports = Tool;

      function isNumber(n) {
         if (n === undefined || n == null || isNaN(parseFloat(n)) || !isFinite(n))
            return false;
         return true;
      }

      Tool.prototype.run = function(x, y){
         if (!isNumber(x) || !isNumber(y))
            throw new Error("Usage: Requires 2 numeric arguments");
         return +x + +y;
      }

注 : スクリプト内の領域オブジェクトの [幅] または [高さ] パラメータにアクセスするには、「.w」および「.h」を使用します。

>     Script.prototype.run = function (image, myRegion) {

> >     return {
> >         x: myRegion.x,
> >         y: myRegion.y,
> >         //width: myRegion.width,
> >         //height: myRegion.height,
> >         width: myRegion.w,
> >         height: myRegion.h,
> >         angle: myRegion.angle,
> >         curve: myRegion.curve
> >     };

>     }

## スクリプト の出力

戻り値 | この関数は、次のタイプのいずれかの値を返すことができます。 数値 true (1) または false (0) 文字列 Binary データ構造体 Blob、Edge、Histogram、または Patterns データ構造体 形状オブジェクト オブジェクト 画像 null ステートメント、未定義ステートメント、または戻り値なしステートメント (これらは空のオブジェクトと同様に処理されます) 次のいずれかの場合、この関数は #ERR を返します。 ソースコードに Run メソッドが含まれていない場合。 引数の値のいずれかがサポートされてないタイプである場合。 コンストラクタが例外をスローした場合。 注 : 例外メッセージがソースコードに書き込まれている場合、GetErrorString 関数を使用して例外メッセージを取得することができます。すべての例外は、同じエラーコード (20000005) を返します。

## スクリプト Vision Data Access functions

Script 関数によって返されたオブジェクトのプロパティにアクセスするには、Get 関数を使用します。