5. RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
WAS SIND SKRIPTSPRACHEN?
Dynamische Typisierung
PHP: Typen/Klassen ab Version 7
JavaScript: Klassen mit ECMAScript 6/2015 – ECMAScript 2016 ebenfalls fertig
TypeScript
Interpretiert zur Laufzeit, keine Kompilierphase
PHP wird kompiliert vor der Ausführung
ASM.JS, WebAssembly
Automatische Speicherverwaltung (automatische
Speicherbereinigung)
13. RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - API
Evaluieren von Skripten mit CSharpScript.EvaluateAsync():
EvaluteAsync<T>() führt Skript aus und gibt Ergebnis zurück
Ergebnis ist vom Typ Task<T> (im Beispiel Task<int>)
CompilationErrorException wenn Typangabe nicht zu Ergebnistyp passt
Nicht-generische Überladung führt implizite Typkonvertierung nicht durch
// Value of result will be 3 of explicit type int.
int result = await CSharpScript.EvaluateAsync<int>("1 + 2");
// Value of result will be 3 of type object.
object result = await CSharpScript.EvaluateAsync("1 + 2");
14. RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - API
Ausführen von Skripten mit CSharpScript.RunAsync():
RunAsync<T>() führt Skript aus und kapselt Ergebnis in ScriptState<T>
Ergebnis ist vom Typ Task<ScriptState<T>> (im Beispiel Task<ScriptState<int>>)
CompilationErrorException wenn Typangabe nicht zu Ergebnistyp passt
Nicht-generische Überladung führt implizite Typkonvertierung nicht durch, Ergebnistyp ist dann Task<ScriptState>
ScriptState<T> kapselt Ergebnis und weitere Informationen über das Skript
// Variable result will contain return value 3 of explicit type int.
ScriptState<int> result = await CSharpScript.RunAsync<int>("1 + 2");
// Variable result will contain return value 3 of type object.
ScriptState<object> result = await CSharpScript.RunAsync("1 + 2");
15. RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - API
Skript-Ergebnisse auswerten – die Klasse ScriptState:
ScriptState beinhaltet Laufzeitinformationen über das Skript
Skript-Variablen und ihre Werte über Eigenschaft Variables abrufbar
Skript-Rückgabewert über Eigenschaft ReturnValue abrufbar
Ableitung ScriptState<T> typisiert ReturnValue mit generischem Typ
Skript-Abstraktion über Eigenschaft Script abrufbar
var a = 5;
var b = 7;
return a + b;
16. RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - API
Skripte erzeugen und verwalten mit CSharpScript.Create():
var snippet =
@"
var a = 5;
var b = 7;
return a + b;
";
// Creates script with return type of int.
Script<int> script2 = CSharpScript.Create<int>(snippet);
// Creates script with return type of object.
Script script = CSharpScript.Create(snippet);
CSharpScript.Create<T>() kapselt Code-Snippet in einer Instanz
der Klasse Script<T>
Code-Snippet wird dabei aber nicht sofort ausgeführt
Die Klasse Script<T> liefert Informationen und bietet viele
Funktionen für den Umgang mit Skripten
Z.B. kann über die Eigenschaft ReturnType der Typ des
Rückgabewertes des Skriptes abgerufen werden
Typparameter T bestimmt Rückgabetyp
Nicht-generische Überladung gibt Instanz von Script<object>
zurück Rückgabetyp ist dann object
17. RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - API
Umgang mit Skripten – die Klasse Script:
ScriptState beinhaltet Laufzeitinformationen über das Skript
erfüllt verschiedene Aufgaben, wie z.B. das Ausführen von Skripten zu späteren
Zeitpunkten, Fortführung von Skripten, Bereitstellung von Compiler-
Informationen, Bereitstellung von Kontext innerhalb von Skripten etc.