Variablen - allgemeine Infos
NeuroomNet unterstützt folgende Datentypen
| Icon | Name | Bescheibung | Wertebeispiele |
|---|---|---|---|
| Bool | Boolsche Werte (Wahrheitswert) können nur zwei Zustände annehmen. | true / false | |
| Number | Ganzzahlige Werte | 0 / 1 / 42 | |
| Float | Fließkommazahl | 3,14 / 0,5 | |
| Text | Zeichenketten | Hallo / 0xff5a11 | |
| Time | Formatierte Zeit | 08:15 / 8:15am | |
| DateTime | Formatiertes Datum und Zeit | 15.02.2023/08:15 |
Zusätzlich steht jeder Datentyp als Liste zur Verfügung. Das Icon hat dabei links drei kleine Punkte:
Listen beinhalten, wie der Name schon sagt, mehrere Bool, Number, Float etc. - Werte.
Grundgedanken von Datentypen
Text: 1 + 2 = 12
Zahl: 1 + 2 = 3
Aus diesem Beispiel lässt sich leicht herleiten, dass es einen großen Unterschied macht, ob eine verarbeitende Software entsprechende Eingaben als Zahl oder Text interpretiert.
Traditionell werden in den meisten Hochsprachen Datentypen für Variablen verwendet. Einige Sprachen verzichten auch auf das Konzept, da es teils bequemer ist. Was allerdings meist mit einem höheren Aufwand beim Finden von Laufzeitfehlern erkauft werden muss.
In NeuroomNet haben wir uns ebenfalls für Datentypen entschieden, da NeuroomNet hauptsächlich mit Geräten vieler Hersteller kommuniziert und diese dabei in ihren Protokollen meist schon Datentypen definieren. Wenn man also von einem Endgerät einen Code in der Form von "0123" geschickt bekommt, kann man sich auch darauf verlassen das dies so beibehalten wird, weil man definiert hat - hier kommt ein Text. Bei einer automatischen Konvertierung würde dieser Text wahrscheinlich als Zahl interpretiert und zu '123' gewandelt.
Natürlich kann man in NeuroomNet auch explizit einen Datentyp in den anderen wandeln, wenn man dies möchte.
Typkonvertierung
Sie können einen Datentyp in einen anderen überführen. In Hochsprachen wird dieser Vorgang auch Typecasting genannt. Allerdings muss eine Konvertierung dazu technisch möglich sein. Folgende Beispiele sollen verdeutlichen, welche Konvertierungen funktionieren und welche nicht.
Hinweis:
Es kann so gut wie alles in einen Text konvertiert werden, deshalb ist diese Richtung hier nicht extra aufgeführt.
Beispiele für die Konvertierung einer Text-Variable ("Original Text") nach Number, Float, Bool:
| Original Text | Konvertieren in Number | Konvertieren in Float | Konvertieren in Bool |
|---|---|---|---|
| "Hallo" | Fehler | Fehler | true |
| "0" | 0 | 0,0 | false |
| "1" | 1 | 1,0 | true |
| "3,14" | 3 | 3,14 | true |
| "1234" | 1234 | 1234,0 | true |
| "12 34" | Fehler | Fehler | true |
| "" | 0 | 0,0 | false |
Sichtbarkeit von Variablen
Die Sichbarkeit von Variablen begegnet dem Anwender hauptsächlich in den Skript Blöcken. Sichtbar bedeutet, von wo kann ich auf diese Variablen zugreifen. Wir unterscheiden 'Globale' und 'Block' Variablen. Auf Variablen, die mit dem Attribut 'Global' angelegt werden, kann von überall zugegriffen werden, beispielsweise von einem Dashboard oder allen Skripten etc.
Variablen mit dem Attribut 'Block' können nur von Ereignissen bzw. Aktionen dieses einen Skript-Blocks verwendet werden, in dem sie erstellt worden sind.
Symbol für Globale Variablen
Symbol für Block Variablen
Warum Globale und Block Variablen?
Eigentlich würden Variablen, auf die man von überall zugreifen kann, für alle Anwendungsfälle genügen. Soweit, so richtig, aber unpraktisch. Die Anzahl der globalen Variablen kann dann schnell in die Höhe schießen und unübersichtlich werden.
Oft hat man den Fall, dass man den Parameter von einem Ereignis in eine Variable schreibt, nur um im selben Block mit einer IF Bedingung zu testen, ob ein bestimmter Wert in der Variable steht. Da die Namen von Globalen Variablen eindeutig sein müssen, müsste man sich für jeden Block einen neuen einzigartigen Namen ausdenken und die Liste der Variablen würde sehr schnell sehr lang werden. Wenn eine Variable nur im Block sichtbar ist, kann man für Blöcke die ähnliches tun, immer die selben Variablennamen verwenden und man läuft nicht Gefahr, die Variable irgendwo anders zu verwenden und irgendwelche Seiteneffekte auszulösen. Daher können auch ganze Blöcke inklusive Variablen kopiert werden. Meist muss man dann nur noch ein paar Konstanten oder Komponentennamen anpassen.