# Script

사용자 정의 JavaScript 소스 코드를 실행합니다. 소스 코드는 스크립트 편집 대화 상자를 이용해 작성하고 편집할 수 있습니다. Script 함수에는 스크립트의 작업을 정의하는 JavaScript 소스 코드(.js 파일로 저장 가능)가 포함되어 있습니다. 소스 코드는 개별 Script 함수의 동작만을 정의합니다. 예를 들어, 하나의 작업에 Script 함수가 다수 있는 경우, 하나의 Script 함수에서 정의된 변수는 해당 작업의 모든 Script 함수가 아니라 해당 특정 Script 함수에 대해서만 정의되는 것입니다.

참고 :

- 하나의 작업에서 사용되는 모든 Script 함수 및 외부 Script 모듈이 할당하는 메모리에는 다음 제한이 적용됩니다.

  - 스크립트 메모리에 할당되는 최대 바이트 수는 4MB입니다.
  - 스택에 할당되는 최대 바이트 수는 64kB입니다.
- 불필요한 메모리 할당을 방지하려면 사용하지 않는 모든 함수(예: 기본 예제 스크립트에 있는 함수를 사용하지 않는 경우)를 스크립트에서 삭제해야 합니다. 예를 들어, 문자열 개체를 생성하고 그리는 미사용 샘플 그리기 함수가 있는 스크립트는 메모리와 CPU 주기를 소비합니다.

- 실행이 불가능하도록 셀 지정된 Script 함수의 기능은 다른 Spreadsheet 함수와 다릅니다. 일반적으로 다른 스프레드시트 함수는 함수가 실행된 후 마지막으로 기록된 값을 유지합니다. 비활성화된 함수를 참조하는 모든 함수는 마지막으로 기록된 값을 반환합니다. 그러나 Script 함수는 내부 run 메서드를 실행해야 하기 때문에 비활성화된 Script 함수를 로드하면 Script 데이터 구조가 표시되지만 Get 함수는 특정 반환 값을 예상하기 때문에 이를 참조하는 함수는 #ERR을 반환합니다. 이는 Script 함수가 실행되지 않았으므로 반환되지 않습니다.

## Script 입력

기존의 In-Sight 스프레드시트 함수와 달리 Script 함수는 1 - 100의 다양한 입력 인수를 취할 수 있습니다. 각 인수는 셀 참조, 문자 값 또는 다음 값 형식 중 하나를 생성하는 식이어야 합니다.

- 숫자
- 문자열
- 이미지
- 이벤트
- 도형 개체
- 2진 데이터 구조
- 미확인 개체, 가장자리, 히스토그램, , Patterns Vision Data Access functions 등의 데이터 구조
- (다른 Script 함수에서 반환된) Object 또는 Array 데이터 구조

참고 :

- 셀 범위가 인수로 지정되면 범위에 포함된 개별 셀 참조로 확장되므로 셀 범위에 포함된 것과 동일한 수의 인수를 사용하게 됩니다.
- Script 함수의 인수가 Blob, Edges, Histogram, Patterns 데이터 구조인 경우 Script 함수에 전달된 개체는 Run 메서드가 반환될 때까지만 사용할 수 있습니다. Script 함수는 이 개체를 직접 반환할 수 있으며, 이는 Script 함수를 포함하는 셀의 결과 값으로 사용할 수 있습니다. 그러나 스크립트가 이 개체를 내부적으로 저장하는 경우(예: Draw 메서드에서 사용) run 메서드가 반환된 후에는 이 개체를 사용할 수 없으며 그 개체의 메서드를 호출하려고 하면 오류가 발생합니다. 이는 스크립트가 run 메서드에서 반환된 스크립트 개체의 속성 등 결과 구조체를 반환하는 경우에도 적용됩니다. 예를 들어, 이러한 속성은 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;
      }

참고 : 스크립트 내에서 Region 개체의 폭 또는 높이 매개 변수에 액세스할 때는 .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
> >     };

>     }

## Script 출력

반환 | 이 함수는 다음 유형의 값을 반환할 수 있습니다. 숫자 참(1) 또는 거짓(0) 문자열 2진 데이터 구조 Blob, Edge, Histogram, Patterns 데이터 구조 도형 개체 개체 이미지 null 또는 정의되지 않았거나 반환되지 않은 명령(빈 개체와 동일하게 처리됨) 이 함수는 다음 조건 중 하나에 해당하면 #ERR을 반환합니다. 소스 코드에 run 메서드가 포함되어 있지 않은 경우. 인수 값 중 지원되는 유형이 아닌 것이 있는 경우. 생성자에서 예외가 발생한 경우. 참고 : GetErrorString 함수를 소스 코드에 작성하면 예외 메시지를 추출하는 데 사용할 수 있습니다. 모든 예외는 동일한 오류 코드(20000005)를 반환합니다.

## Script Vision Data Access functions

Get 함수는 Script 함수가 반환한 개체 속성에 액세스하기 위해 이용됩니다.