Daten (Werte) besitzen in Programmen bestimmte Datentypen:
Kerndatentypen sind in Lua:
Zahlen (number): 0, 1, -1, 1.23, ..
Boolesche Werte: false
, true
Zeichenketten: "text"
oder 'text'
Datenstrukturen: {a=1,b=2, ..}
Arrays: {1,2,3,4..}
In Lua sind Funktionen Werte erster Ordnung: function () .. end
Eine Variable ist gekennzeichnet durch:
In Lua kann eine Variable dynamisch zur Laufzeit Werte mit unterschiedlichen Datentypen speichern → Polymorphe Variablen und dynamische Typisierung!
Definition 1. (Definition einer globalen und loakelen Variable)
Eine Funktion ist gekennzeichnet durch
return
, Kontrollanweisungen)
Funktionen können in Ausdrücken aufgerufen werden (Funktionsapplikation)
In Funktionen können weitere Funktionen ausgeführt werden (Funktionskomposition)
Funktionen (Prozeduren) können als Anweisung ausgeführt werden
In Lua kann eine Funktion auch ohne Namen anonym als Wert definiert werden!
Funktionen geben Werte durch die return v
Anweisung zurück
Definition 2. (Definition und Applikation von Funktionen)
In Lua gibt es keine Unterscheidung zwischen Arrays, Datenstrukturen, und Objekten!
Es gibt nur Tabellen die aus key-value Paaren bestehen (Schlüssel und Wert) → Hashtabellen
Auf einen Tabelleneintrag kann mittes der Schlüsselreferenzierung t.key
zugegriffen werden (in Ausdrücken lesend oder in datenanweisungen schreibend)
Die Definition von Records und Arrays ist sehr ähnlich
Bei Arrays ist der Schlüssel aber ein automatisch erzeugter Index 1,2,3, .. → Erstes Element hat immer den Index 1! → Die Länge eines Arrays kann über die #
array Operation ermittelt werden
Da Records und Arrays tatsächlich Hashtabellen sind, und der Schlüssel immer eine Zeichenkette ist (auch Index 1!), sind folgende Schreibweisen isomorph: t.key == t["key"]
Definition 3. (Definition und Applikation von Tabellen)
Definition 4. (Datenanweisung)
Definition 5. (Bedingte Verzweigung)
Definition 6. (Mehrfachauswahl (Extension, kein Standard))
Definition 7. (Zählschleife)
Definition 8. (Bedingte Schleifen)
Um das Programmieren zu erlernen ist eine grafische Visualisierung von Programmabläufen und deren Ausgabe sinnvoll um Programmierkonzepte zu erlernen
Die Grafik ist das Rechenergebnis!
Die Turtle Grafik hat einfache Befehle, die eine symbolische Schildkröte als Dreieck benutzt um auf einer zweidimensionalen Fläche zu zeichnen.
Dabei kann die Position des Dreiecks absolut (posn) oder relativ (jump,move) verändert werden.
Definition 9. (Turtle Grafik)
Beispiel 1. (Iteratives Zeichnen einer Blume)
require "turtle"
for i=1,12 do
for j=1,12 do
move(50)
turn(30)
end
turn(30)
wait(0.1)
end
Beben der reinen prozeduralen Programmierung mit Funktionen und Records (Tables) kann in Lua auch auf einfache Weise objektorientiert programmiert werden
Dabei werden Tabellen wieder verwendet um Objekte und Klassen zu implementieren
Jedoch ist die Unterstützung von Lua nur gering → Verwendung der class Bibliothek, die in der pervasives Bibliothek enthalten ist (wird von lvm direkt geladen)
Bei der Instanziierung von Objekten werden i.A. Daten des Objekts mit Parameterwerten initialisiert → Definition einer Initialisierungsfunktion erforderlich!
Ein Objekt kann sich selbst mit self referenzieren
Definition 10. (Definition von Klassen und Instanziierung von Objekten)
Ein Objekt einer Klasse kann sich selber über die Variable self referenzieren.
c.m(c,v1,v2,..)
-- Analog kurze Schreibweise
c:m(v1,v2,..)
c = class()
function c:init (p1,p2,..) .. end
function c:m (p1,p2,..) .. end
local o = c:new(v1,v2,..)
LUAOS: Lua Operating System
LUAOS wird auf einem Rechner (Netzwerkknoten) durch eine Lua VM ausgeführt (lvm)
LUAOS bietet einen WEB basierten Zugriff auf Rechnerknoten
LUAOS:
Gibt die aktuelle Systemzeit in Millisekunden zurück
Ausgabe von Text oder Werten auf der virtuellen Konsole
Der aufrufende Prozess wird für die angegebene Zeit blockiert
Blockierender Aufruf des Schedulers und Abgabe der Ausführung (an andere Prozesse) mit späterer Fortführung
Erzeugt einen neuen leichtgewichtigen Prozess. Der Prozess ist sofort ausführungsbereit.
Der aufrufende Prozess wird blockiert bis der Subprozess terminiert ist
Erzeugt eine neue HTTP Instanz
Ausführung einer HTTP GET Anfrage. Das Ergebnis (Fehler oder Daten) wird durch eine asynchrone Rückruffunktion bearbeitet.
Ausführung einer HTTP OUT Anfrage. Das Ergebnis (Fehler oder Daten) wird durch eine asynchrone Rückruffunktion bearbeitet.
Installation eines HTTP Service (IP Port ipport). Eingehende GET/PUT Anfragen werden durch eine Rückruffunktion bearbeitet. Das Ergebnis der Anfrage wird von dieser Funktion als Text zurück gegeben.
Erzeugt eine neue HTML Formattierungssnstanz
Erzeugt den Rahmen einer HTML Seite
Erzeugt den Kopf einer HTML Seite
Erzeugt den Inhalt einer HTML Seite
function html:table(head table, body table table) → string
Weitere Funktionen: h1, h2, h3, ol, ul, li, dl, dt, dd
Erzeugt einen neuen Timer.
Startet den Timer mit dem angegebenen Intervall und der Periodenzeit (oder 0). Nach Ablauf des Intervalls wird ein Ereignis signalisiert, auf welches mit der await Operation gewartet werden kann.
Stoppt den Timer. Es werden keine weiteren Ereignisse mehr signalisiert.
Auf ein Timerereignis warten. Der aufrufende Prozess wird blockiert.
Gibt eine Liste alle verfügbaren Sensoren zurück (Liste der Namen)
Erzeugt eine neue Sensorinstanz vom Typ sensorclass. Mögliche Klassen sind: “temperature”, “cpu”.
Gibt den aktuellen Sensorwert zurück.
Kalibriert den Sensor oder die Sensorfunktion.
Gibt eine Liste alle verfügbaren Aktuatoren zurück (Liste der Namen)
Erzeugt eine neue Aktuatorinstanz vom Typ actorclass. Mögliche Klassen sind: “dotdisp”".
Setzt den Aktuator in einen definierten Anfangszustanf.
Setzt eine Steuervariable mit einem neuen Aktuatorwert.
Gibt den Wert einer Aktuatorvariable zurück.
Ausführung eines Steuerkommandos.
|
|
-- Actor DOTS Matrix
local dot = actor:new('dots')
dot:reset()
-- dot:set(on,row,col)
dot:set(1,4,4)
sleep(1000)
dot:set(0,4,4)
-- Sensor CPU Temperatur
local s = sensor:new('temperature')
print(s:read())
Definition 11. (Synchrone Ereignisverabeitung)
Process=ioop1synchron→ioop2synchron→next
Definition 12. (Asynchrone Ereignisverabeitung)
Process=ioop1asynchron→ioop2asynchron→next..→function1→function2 |
ioop1asynchron→ioop2asynchron→next..→function2→function1 |
ioop1asynchron→function1→ioop2synchron→next.. | ..
Beispiel 2. (Synchrone Verzögerung einer Serviceschleife)
Beispiel 3. (Synchrone Verzögerung einer Serviceschleife mit einem Timer)
Beispiel 4. (Periodische asynchrone Ausführung einer Serviceschleife)
Beispiel 5. (Asynchrone Implementierung eines HTTP WEB Servers)
Was ist der Nachteil bei der Verwendung eines Timers mit explizitem Warten auf das Ereignis im Vergleich zur sleep Operation oder der asynchronen Ausführung mittels setInterval?
Was sind Vorteile und Nachteile der synchronen gegenüber der asynchronen Ereignis- und Datenverarbeitung?