기능
DelphiScript 언어에서 일반적으로 사용되는 함수 문은 아래에 설명되어 있습니다. DelphiScript 함수의 범위는 FileIO 루틴, Math 루틴, String 루틴, Extension 루틴 섹션으로 나누어 제시됩니다.
Evaluate 함수로 식 계산하기
내장 함수 Evaluate는 런타임 동안 유효한 수학 표현식을 포함한 문자열을 해석하고 결과를 반환합니다. 예를 들어, Evaluate(ProcNames[ProcIndex]);와 같은 스크립트를 작성할 수 있으며, 그러면 ProcNames[ProcIndex]에 지정된 프로시저가 호출됩니다.
이러한 식을 계산하려면, expression이 Expr 매개변수로 지정되는 Evaluate 메서드를 사용할 수 있습니다. 예를 들어, 다음과 같은 식을 계산할 수 있습니다:
Evaluate('2+5');
Evaluate('((10+15)-5)/2*5');
Evaluate('sin(3.1415926/2)*10');
Evaluate('2.5*log(3)');
함수 및 프로시저에 매개변수 전달하기
스크립트에 정의된 함수와 프로시저는 모두 매개변수를 받도록 선언할 수 있습니다. 또한 함수는 값을 반환하도록 정의됩니다. 프로시저/함수 선언에서 매개변수의 타입은 무시되며 생략할 수 있습니다. 예를 들어, 다음 코드는 올바릅니다:
Function sum(a, b) : integer;
Begin
Result := a + b;
End;
프로시저에서 빠져나오기
DelphiScript는 프로시저가 자연스럽게 종료되기 전에 강제로 종료하도록 하는 Exit 및 Break 문을 제공합니다. 예를 들어, 매개변수 값이 적절하지 않은 경우 사용자에게 경고를 표시하고 종료하고 싶을 수 있는데, 아래 예제가 이를 보여줍니다.
Procedure DisplayName (s);
Begin
If s = '' Then
Begin
ShowMessage('Please enter a name');
Exit;
End;
ShowMessage(S + ' is shown');
End;
파일 IO 루틴
DelphiScript에는 다음 IO 루틴이 있습니다:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelphiScript를 사용하면 텍스트 파일에 정보를 쓸 수 있으며, DelphiScript는 비정형(untyped) 언어이므로 모든 값은 먼저 문자열로 변환되어야 합니다.
여기서 Read 및 ReadLn 루틴은 동일합니다 — 다음 줄을 포함하지 않고 그 전까지 한 줄을 읽습니다. Writeln(String) 루틴은 Write(S) 및 Write(LineFeed + CarriageReturn) 루틴과 동일합니다.
텍스트 파일을 쓰려면 AssignFile, ReWrite, Writeln 및 CloseFile 프로시저를 사용하십시오. 텍스트 파일을 읽으려면 AssignFile, Reset, Readln, 및 CloseFile 프로시저를 사용하십시오. 아래 예제는 텍스트 파일에 쓰고 줄 끝(end-of-line) 마커를 추가합니다. IO 실패가 발생할 경우 스크립트를 안전하게 만들기 위해 Try / Finally / End 블록을 사용하는 것이 권장됩니다 .
Example:
Var
InputFile : TextFile;
OutputFile : TextFile;
I : Integer;
Line : String;
Begin
AssignFile(OutputFile,eConvertedFile.Text);
Rewrite(OutputFile);
AssignFile(InputFIle,eOriginalFIle.Text);
Reset(InputFile);
Try
While not EOF(InputFile) do
Begin
Readln(InputFile,Line);
For I := 1 to Length(Line) Do
Line[I] := UpperCase(Line[I]);
Writeln(Outputfile, Line);
End;
Finally
CloseFile(InputFile);
CloseFile(OutputFile);
End;
End;
수학 루틴
DelphiScript에는 다음 수학 루틴이 있습니다:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
문자열 루틴
DelphiScript에는 문자열 또는 문자를 조작할 수 있는 다음 문자열 루틴이 있습니다. (DelphiScript에서 사용되는 문자열 루틴의 대부분은 Embarcadero Delphi의 SysUtils 유닛에서 가져온 것입니다.) 아래 표에는 그중 일부만 표시되어 있습니다:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelphiScript에서 not 지원되는 문자열 루틴은 아래 표에 정리되어 있습니다:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
확장(Extension) 루틴
확장 루틴은 스크립트에서 서버 프로세스(명령은 매개변수가 있는 경우 이를 포함한 패키징된 서버 프로세스임)를 다룰 때 사용되며, 특히 프로세스 매개변수의 문자열을 추출하거나 설정해야 할 때 유용합니다. 일부 루틴은 아래에 나열되어 있습니다.
스크립트에서 프로세스의 매개변수를 실행하려면 다음 함수가 필요할 수 있습니다:
|
|
|
|
|
|
|
|
|
Useful functions:
|
|
|
|
|
|
|
|
|
Useful dialogs:
|
|
|
|
|
|
DelphiScript에서 Set 사용하기
Embarcadero Delphi의 Set 및 In 키워드와, set 연산자 +, -, *, <= 및 >=는 DelphiScript에서 지원되지 않습니다. 이에 해당하는 Set Operator 키워드는 아래 표에 정리되어 있습니다.
DelphiScript에는 set 타입이 없습니다. DelphiScript 스크립트에서 set을 사용하려면 내장 함수인 MkSet, MkSetRange, InSet, SetUnion, SetDifference, SetIntersection, 및 SubSet 함수를 사용하여 set을 조작할 수 있습니다. 이에 대해서는 아래에서 더 자세히 설명합니다.
Set 연산자
Embarcadero Delphi Set Operator keyword |
Equivalent DelphiScript Set Operator keyword |
|---|---|
|
|
- |
|
* |
|
|
|
|
|
|
|
|
|
MkSet 함수
MkSet 함수는 가변 개수의 인수를 받는 set 생성자입니다. 예:
Font.Style = MkSet(fsBold,fsItalic);
여기서 MkSet(fsBold,fsItalic) 는 set 요소 두 개, 즉 fsBold 및 fsItalic만을 의미합니다.
MkSetRange 함수
MkSetRange 함수는 인수 범위를 받는 set 생성자입니다. 예:
LayerSet := MkSetRange(eTopLayer,eBottomLayer);
MkSetRange(eTopLayer,eBottomLayer) 함수는 eTopLayer부터 eBottomLayer까지의 레이어 범위를 의미합니다.
InSet 함수
이 InSet 함수는 Delphi의 In 연산자를 대체하는 용도로 사용됩니다. A in B는 InSet(A, B)와 같습니다.
If InSet(A,B) then
ShowMessage('A is in B set')
Else
ShowMessage('A not in B set');
SetUnion 함수
SetUnion 함수는 Delphi의 + 연산자를 대체하는 용도로 사용됩니다. A + B는 SetUnion(A, B)와 같습니다.
ASet := BSet + CSet;
// should be changed to:
ASet := SetUnion(BSet,CSet);
// in order to achieve the desired script result.
SetDifference 함수
SetDifference 함수는 Delphi의 - 연산자를 대체하는 용도로 사용됩니다. A - B는 SetDifference(A, B)와 같습니다.
SetIntersection 함수
SetIntersection 함수는 Delphi의 * 연산자를 대체하는 용도로 사용됩니다. A * B는 SetIntersection(A, B)와 같습니다.
SubSet 함수
SubSet 함수는 Object Pascal의 <= 연산자를 대체하는 용도로 사용됩니다. A <= B는 SubSet(A, B)와 같습니다.
예외 처리기 사용하기
Try 키워드는 Try-Except 문 또는 Try-Finally 문을 도입합니다. 이 두 문은 서로 관련되어 있지만 목적이 다릅니다:
Try-Finally
Try-Finally에서는 Try 블록에서 예외가 발생하든, Exit 또는 Break가 발생하든 관계없이 Finally 블록의 문이 항상 실행됩니다 . Try-Finally 블록은 임시 객체 및 기타 리소스를 해제하고 정리(clean-up) 작업을 수행하는 데 사용합니다.
일반적으로 서브루틴에는 Try-Finally 문이 하나만 필요합니다.
Example:
Reset(F);
Try
// process file F
Finally
CloseFile(F);
End;
Try-Except
Try-Except는 예외적인 경우를 처리하는 데 사용합니다. 예를 들어 특정 예외를 포착하여 오류 로그에 기록하거나 사용자 친화적인 대화상자를 만드는 등 유용한 처리를 할 수 있습니다. DelphiScript에서는 On 키워드가 지원되지 않으므로, Except 블록 내부에서는 Raise 문을 사용합니다.
Example:
Try
X := Y/Z;
Except
Raise('A divide by zero error!');
End;
Raise
Raise 키워드는 Try 키워드와 관련이 있습니다. Raise 키워드는 매개변수 없이 사용하여 마지막 예외를 다시 발생(re-raise)시킬 수 있습니다. 또한 문자열 매개변수와 함께 사용하여 특정 메시지로 예외를 발생시킬 수도 있습니다.
Example:
Raise(Format('Invalid Value Entered : %d', [Height]));
On 키워드가 지원되지 않으므로, (Embarcadro Delphi에서 사용 가능한) Exception 객체는 사용할 수 없습니다.