DWScript - další možnost skriptování v Delphi

vložil Radek Červinka 4. září 2010 01:21

Jednou tu už skriptování v Delphi bylo, ale tato knihovna (DWS) se mi zdá čitelnější a podle testů autora je řádově rychlejší než dříve uvedená knihovna. Navíc se mi líbí jak se dá jednoduše integrovat a spolupracovat s kódem v Delphi.

DWS na code.google.com je primárně určeno pro Delphi 2009+ a je vylepšením (zrychlením) nyní už neudržované knihovny DelphiWebScript (pro starší Delphi).

Podporované vlastnosti:

  • typy ve skriptu jsou mapovány na podobné typy (tj. string je string atd.), tj. větší rychlost než při použití Variant
  • obsluha výjimek
  • volání uživatelského kódu v Delphi (viz ukázka)
  • varianty
  • OOP včetně virtuálních metod (a operátorů IS, AS) (ukázka skriptu)
  • deklarace proměnné kdekoliv
  • 64bit integer

Ukážu malý program, který má dva TMemo, TDelphiWebScript a tlačítko, kde do jednoho memo se napíše program a v druhém se objeví výsledek kompilace po stisku tlačítka. Navíc zároveň předvedu volání našeho Delphi kódu ze skriptu.

    1unit frmMain;
    2
    3interface
    4
    5uses
    6  Windows, Messages, SysUtils, Variants, Classes, Controls, Forms,
    7  dwsComp, StdCtrls, Dialogs, dwsExprs, dwsCompiler;
    8
    9type
   10  TMainForm = class(TForm)
   11    DelphiWebScript: TDelphiWebScript;
   12    memSourceCode: TMemo;
   13    memResult: TMemo;
   14    Button1: TButton;
   15    procedure Button1Click(Sender: TObject);
   16    procedure FormCreate(Sender: TObject);
   17  public
   18  end;
   19
   20var
   21  MainForm: TMainForm;
   22
   23implementation
   24uses
   25  dwsFunctions, dwsSymbols;
   26
   27{$R *.dfm}
   28// zapouzdření naší "nové" funkce
   29type
   30  TOwnShowMsg = class (TInternalMagicProcedure)
   31    procedure DoEvalProc(args : TExprBaseList); override;
   32  end;
   33
   34procedure TOwnShowMsg.DoEvalProc(args : TExprBaseList);
   35begin
   36  ShowMessage('Informace: '+ args.AsString[0]);
   37end;
   38
   39procedure TMainForm.Button1Click(Sender: TObject);
   40var
   41  prog : TdwsProgram;
   42begin
   43  prog:=DelphiWebScript.Compile(memSourceCode.Lines.Text);
   44  try
   45    // kompilovano bez chyb?
   46    if prog.Msgs.Count>0 then
   47      memResult.Lines.Text:=prog.Msgs.AsInfo
   48    else
   49    begin
   50      memResult.Clear;
   51      try
   52        prog.Execute;
   53        memResult.Lines.Text:=(prog.Result as TdwsDefaultResult).Text;
   54      except
   55        on E: Exception do begin
   56           memResult.Lines.Text:=E.ClassName+': '+E.Message;
   57        end;
   58      end;
   59    end;
   60  finally
   61    prog.Free;
   62  end;
   63end;
   64
   65procedure TMainForm.FormCreate(Sender: TObject);
   66begin
   67   RegisterInternalProcedure(TOwnShowMsg, 'OwnShowMsg', ['s', 'String']);
   68end;
   69
   70end.

Ve FormCreate se registruje do skriptovacího engine naše procedure OwnShowMsg viz. třída TOwnShowMsg (mimochodem si všimněte, že jak deklarace, tak implementace jsou v části implementace), kterou budeme využívat. Naše procedura zavolá ShowMessage s informací 'Informace: '+text

Nyní ještě nějaký demo skript:

var s : String = 'Hello World!';
ShowMessage(s);

var
  ss: string;
var
  i: Integer;
for i := 1 to 10 do
  ss := ss + IntToStr(i);

OwnShowMsg(ss);

Jak je patrné, skript je ohledně syntaxe volnější, přesto dobře detekuje chyby při "překladu".


Nabízíme Delphi školení a konzultace na různá témata, primárně ve Vaší firmě.

Tagy: ,

Komponenty

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS