Chức năng
Các câu lệnh hàm thông dụng được sử dụng trong ngôn ngữ DelphiScript được trình bày bên dưới. Phạm vi các hàm của DelphiScript được chia thành các mục cho các thủ tục FileIO, thủ tục toán học, thủ tục chuỗi và thủ tục mở rộng.
Tính toán biểu thức bằng hàm Evaluate
Hàm dựng sẵn Evaluate sẽ diễn giải một chuỗi chứa biểu thức toán học hợp lệ trong lúc chạy và trả về kết quả. Ví dụ, bạn có thể viết một script như Evaluate(ProcNames[ProcIndex]); và thủ tục được chỉ định trong ProcNames[ProcIndex] sẽ được gọi.
Để tính một biểu thức như vậy, bạn có thể dùng phương thức Evaluate trong đó biểu thức được chỉ định bởi tham số Expr. Ví dụ, bạn có thể tính các biểu thức như sau:
Evaluate('2+5');
Evaluate('((10+15)-5)/2*5');
Evaluate('sin(3.1415926/2)*10');
Evaluate('2.5*log(3)');
Truyền tham số cho hàm và thủ tục
Cả hàm và thủ tục được định nghĩa trong một script đều có thể được khai báo để nhận tham số. Ngoài ra, hàm được định nghĩa để trả về một giá trị. Kiểu của tham số trong khai báo procedure/function sẽ bị bỏ qua và có thể lược bỏ. Ví dụ, đoạn mã này là đúng:
Function sum(a, b) : integer;
Begin
Result := a + b;
End;
Thoát khỏi một thủ tục
DelphiScript cung cấp các câu lệnh Exit và Break để buộc một thủ tục thoát ra trước khi kết thúc một cách tự nhiên. Ví dụ: nếu giá trị của một tham số không phù hợp, bạn có thể muốn đưa ra cảnh báo cho người dùng và thoát ra, như ví dụ dưới đây cho thấy.
Procedure DisplayName (s);
Begin
If s = '' Then
Begin
ShowMessage('Please enter a name');
Exit;
End;
ShowMessage(S + ' is shown');
End;
Các thủ tục File IO
DelphiScript có các thủ tục IO sau:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelphiScript cho phép bạn ghi thông tin vào tệp văn bản, và vì DelphiScript là một ngôn ngữ không định kiểu, mọi giá trị trước tiên đều phải được chuyển đổi thành chuỗi.
Tại đây, các thủ tục Read và ReadLn là tương đương — chúng đọc một dòng cho đến, nhưng không bao gồm, dòng kế tiếp. Một thủ tục Writeln(String) tương đương với một Write(S) và một thủ tục Write(LineFeed + CarriageReturn).
Để ghi ra tệp văn bản, hãy dùng các thủ tục AssignFile, ReWrite, Writeln và CloseFile. Để đọc một tệp văn bản, hãy dùng các thủ tục AssignFile, Reset, Readln và CloseFile. Ví dụ bên dưới ghi vào một tệp văn bản và thêm ký hiệu kết thúc dòng. Khuyến nghị dùng khối Try / Finally / End để giúp script an toàn trong trường hợp xảy ra lỗi IO.
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;
Các thủ tục toán học
DelphiScript có các thủ tục toán học sau:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Các thủ tục chuỗi
DelphiScript có các thủ tục chuỗi sau, có thể thao tác trên chuỗi hoặc ký tự. Chỉ một phần các thủ tục chuỗi (đa số các thủ tục chuỗi mà DelphiScript dùng được nhập từ unit SysUtils của Embarcadero Delphi) được hiển thị trong bảng dưới đây:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Các thủ tục chuỗi được not DelphiScript hỗ trợ được nêu trong bảng dưới đây:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Các thủ tục mở rộng
Các thủ tục mở rộng được dùng khi làm việc với các tiến trình máy chủ (một lệnh là một tiến trình máy chủ được đóng gói cùng với các tham số, nếu có) trong script, đặc biệt nếu bạn cần trích xuất hoặc thiết lập chuỗi cho các tham số của tiến trình. Một số thủ tục được liệt kê bên dưới.
Để thực thi các tham số của tiến trình trong một script, có thể cần các hàm sau:
|
|
|
|
|
|
|
|
|
Useful functions:
|
|
|
|
|
|
|
|
|
Useful dialogs:
|
|
|
|
|
|
Sử dụng tập hợp trong DelphiScript
Các từ khóa Set và In của Embarcadero Delphi, cùng các toán tử tập hợp +, -, *, <= và >= không được hỗ trợ trong DelphiScript. Các từ khóa Toán tử tập hợp tương đương được liệt kê trong bảng dưới đây.
DelphiScript không có kiểu tập hợp. Để sử dụng tập hợp trong các script DelphiScript, hãy dùng các hàm dựng sẵn; các hàm MkSet, MkSetRange, InSet, SetUnion, SetDifference, SetIntersection và SubSet cho phép thao tác tập hợp trong một script DelphiScript. Chúng được mô tả chi tiết hơn bên dưới.
Toán tử tập hợp
Embarcadero Delphi Set Operator keyword |
Equivalent DelphiScript Set Operator keyword |
|---|---|
|
|
- |
|
* |
|
|
|
|
|
|
|
|
|
Hàm MkSet
Hàm MkSet là một hàm tạo tập hợp với số lượng đối số biến đổi. Ví dụ:
Font.Style = MkSet(fsBold,fsItalic);
Tại đây, MkSet(fsBold,fsItalic) chỉ biểu thị hai phần tử của tập hợp; fsBold và fsItalic.
Hàm MkSetRange
Hàm MkSetRange là một hàm tạo tập hợp với một dải đối số. Ví dụ:
LayerSet := MkSetRange(eTopLayer,eBottomLayer);
Hàm MkSetRange(eTopLayer,eBottomLayer) biểu thị một dải lớp từ eTopLayer đến eBottomLayer.
Hàm InSet
Hàm InSet này được dùng để thay thế cho toán tử In của Delphi. A in B tương đương với InSet(A, B).
If InSet(A,B) then
ShowMessage('A is in B set')
Else
ShowMessage('A not in B set');
Hàm SetUnion
Hàm SetUnion này được dùng để thay thế cho toán tử + của Delphi. A + B tương đương với SetUnion(A, B).
ASet := BSet + CSet;
// should be changed to:
ASet := SetUnion(BSet,CSet);
// in order to achieve the desired script result.
Hàm SetDifference
Hàm SetDifference này được dùng để thay thế cho toán tử - của Delphi. A - B tương đương với SetDifference(A, B).
Hàm SetIntersection
Hàm SetIntersection này được dùng để thay thế cho toán tử * của Delphi. A * B tương đương với SetIntersection(A, B).
Hàm SubSet
Hàm SubSet này được dùng để thay thế cho toán tử <= của Object Pascal. A <= B tương đương với SubSet(A, B).
Sử dụng bộ xử lý ngoại lệ
Từ khóa Try giới thiệu câu lệnh Try-Except hoặc câu lệnh Try-Finally. Hai câu lệnh này có liên quan với nhau nhưng phục vụ các mục đích khác nhau:
Try-Finally
Với Try-Finally, các câu lệnh trong khối Finally luôn được thực thi bất kể có xảy ra ngoại lệ từ khối Try, hay có Exit hoặc Break hay không. Hãy dùng khối Try-Finally để giải phóng các đối tượng tạm thời và các tài nguyên khác đồng thời thực hiện các hoạt động dọn dẹp.
Thông thường, chỉ cần một câu lệnh Try-Finally trong một chương trình con.
Example:
Reset(F);
Try
// process file F
Finally
CloseFile(F);
End;
Try-Except
Hãy dùng Try-Except để xử lý các trường hợp ngoại lệ. Ví dụ, để bắt các ngoại lệ cụ thể và thực hiện điều gì đó hữu ích với chúng, chẳng hạn ghi chúng vào nhật ký lỗi hoặc tạo một hộp thoại thân thiện. Vì từ khóa On không được hỗ trợ trong DelphiScript, câu lệnh Raise được dùng bên trong khối Except.
Example:
Try
X := Y/Z;
Except
Raise('A divide by zero error!');
End;
Raise
Từ khóa Raise có liên quan đến từ khóa Try. Từ khóa Raise có thể được dùng mà không cần tham số để phát sinh lại ngoại lệ gần nhất. Nó cũng có thể được dùng với một tham số chuỗi để phát sinh một ngoại lệ bằng một thông điệp cụ thể.
Example:
Raise(Format('Invalid Value Entered : %d', [Height]));
Lưu ý rằng vì từ khóa On không được hỗ trợ, nên các đối tượng Exception (có trong Embarcadro Delphi) không thể được sử dụng.