Script.NET

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Script.NET
Paradigmen: Skriptsprache
Entwickler: Petro Protsyk
Aktuelle Version: Beta 17122007  (17. Dezember 2007)
Typisierung: schwach, dynamisch, Duck-Typing
Beeinflusst von: JavaScript
Betriebssystem: alle mit CLR
Lizenz: GNU Lesser General Public License (LGPL)
https://www.protsyk.com/scriptdotnet/

Script .NET bzw. S# ist eine Programmiersprache, die sich Mechanismen der Metaprogrammierung bedient. Sie stellt dabei Funktionalitäten zur Verfügung, die es erlauben, Skripte in der Common Language Runtime (CLI) des .Net-Frameworks auszuführen und während der Laufzeit zu verändern. Die Syntax ist sehr stark von JavaScript beeinflusst.

Metaprogrammierung

[Bearbeiten | Quelltext bearbeiten]

In Script .NET existiert u. a. der spezielle Operator <[ Programmcode ]>, der den Abstract Syntax Tree (AST) eines Programms zurückgibt. Auf den AST des aktuellen Programms kann über das Objekt prog zugegriffen werden, wie das folgende Beispiel zeigt:

// AST erstellen, der eine MessageBox mit dem Ausdruck "Guten Tag!" ausgibt
ast = <[ MessageBox.Show('Guten Tag!'); ]>;

// Programmcode dem aktuellen Programm anfügen
prog.AppendAst(ast);
MessageBox.Show('Hallo, Welt!');
zahlen = [5, 9, 1979, 23, 9, 1979];

for (i = 0; i < zahlen.Length; i++) {
    for (j = i + 1; j < zahlen.Length; j++) {
        if ( zahlen[j] < zahlen[i] ) {
            // tauschen
            temp      = zahlen[i];
            zahlen[i] = zahlen[j];
            zahlen[j] = temp;
        }
    }
}

// Ausgabe erstellen
ausgabe = 'Ergebnis: ';
for (i = 0; i < zahlen.Length; i++) {
    if (i > 0) {
        ausgabe = ausgabe + ', ';
    }
    ausgabe = ausgabe + zahlen[i];
}

MessageBox.Show(ausgabe);
rss = new XmlDocument();
rss.Load('https://www.tagesschau.de/xml/tagesschau-meldungen/');

MessageBox.Show('tagesschau.de Meldungen: ');

// Titel aller vorhandenen Themen/Meldungen ausgeben
foreach (feed in rss.SelectNodes('/rss/channel/item/title'))
    MessageBox.Show(feed.InnerText);