Verarbeitung
- Logik
- Schleifen
- Mathematik
- Text
- Datei
- Datenstrukturen
- Util
- Variablen
- Funktionen
- Machine Learning
- Importe
Logik
Bedingte Anweisungen
Bedingte Anweisungen sind zentral für die Programmierung. Sie machen es möglich, Fallunterscheidungen zu formulieren wie:
- Wenn es einen Weg nach links gibt, biege links ab.
- Wenn Punktzahl = 100, drucke "Gut gemacht!".
"wenn"-Block
Die einfachste Bedingung ist ein "wenn"-Block:
Wenn dieser ausgeführt wird, wird der Wert der Variable x mit 100 verglichen. Wenn er größer ist, wird "Was für eine große Zahl!" ausgegeben. Andernfalls passiert nichts.
"wenn-sonst"-Block
Es ist auch möglich, anzugeben, dass etwas passieren soll, wenn die Bedingung nicht wahr ist, wie in diesem Beispiel:
Wie beim vorherigen Block wird "Was für eine große Zahl!" ausgegeben, wenn x > 100 ist. Andernfalls wird "Das ist nicht sehr groß." angegeben.
Ein "wenn"-Block kann einen "sonst"-Abschnitt haben, aber nicht mehr als einen.
"wenn-sonst-wenn"-Block
Es ist auch möglich, mehrere Bedingungen mit einem einzigen "wenn"-Block zu testen, indem "sonst-wenn"-Klauseln hinzugefügt werden:
Der Block prüft zuerst, ob x > 100 ist, und gibt "Was für eine große Zahl!" aus, wenn das der Fall ist. Ist dies nicht der Fall, prüft er weiter, ob x = 42 ist. Wenn ja, gibt er "Das ist meine Glückszahl!" aus. Andernfalls passiert nichts.
Ein "wenn"-Block kann eine beliebige Anzahl von "sonst-wenn"-Abschnitten haben. Die Bedingungen werden von oben nach unten ausgewertet, bis eine erfüllt ist oder bis keine Bedingung mehr übrig sind.
"wenn-sonst-wenn-sonst"-Block
"wenn"-Blöcke können sowohl "sonst-wenn" als auch "sonst"-Abschnitte haben:
Der "sonst"-Abschnitt garantiert, dass eine Aktion ausgeführt wird, auch wenn keine der vorherigen Bedingungen wahr ist.
Ein "sonst"-Abschnitt kann nach einer beliebigen Anzahl von "sonst-wenn"-Abschnitten auftreten, einschließlich Null, dann erhält man einen ganz normalen "wenn-sonst"-Block.
Blockmodifikation
In der Werkzeugleiste erscheint nur der einfache "wenn"-Block und der "wenn-sonst"-Block:
Um "sonst-wenn" - und "sonst"-Klauseln hinzuzufügen, kann man auf das (+) Symbol klicken. Mit (-) Symbol lassen sich "sonst-wenn" -Klauseln wieder entfernen:
Beachte, dass die Formen der Blöcke das Hinzufügen einer beliebigen Anzahl von "sonst-wenn"-Unterblöcken erlauben, aber nur bis zu einem "wenn"-Block.
Boolesche Logik
Boolesche Logik bildet die Grundlage für die Implementierung bedingter Anweisungen. Sie basiert auf einem einfachen mathematischen System mit zwei Zuständen:
- wahr
- falsch
Logikblöcke in ROBO Pro Coding sind in der Regel dafür da, Bedingungen und Schleifen zu kontrollieren.
Hier ein Beispiel:
Wenn der Wert der Variable x größer als 100 ist, gilt die Bedingung als wahr und "Was für eine große Zahl!" wird ausgegeben. Ist der Wert nicht größer als 100, ist die Bedingung falsch und es wird "Das ist nicht sehr groß." ausgegeben. Boolesche Werte können in Variablen gespeichert und an Funktionen übergeben werden, ähnlich wie Zahlen, Texte und Listenwerte.
Wenn ein Block einen Booleschen Wert als Eingabe erwartet und keine Eingabe erfolgt, wird dies als falsch interpretiert. Es ist technisch möglich, jedoch nicht empfohlen, nicht boolesche Werte in Bedingungseingaben zu verwenden. Diese Methode wird nicht empfohlen, und ihr Verhalten kann sich in zukünftigen Versionen von ROBO Pro Coding ändern.
Werte
Ein einzelner Block mit einer Dropdown-Liste, die entweder wahr oder falsch angibt, kann verwendet werden, um einen Booleschen Wert abzurufen:
Vergleichsoperatoren
Es gibt sechs Vergleichsoperatoren. Jedem werden zwei Eingaben (normalerweise zwei Zahlen) übergeben und der Vergleichsoperator gibt wahr oder falsch zurück, je nachdem, wie die Eingaben miteinander verglichen werden.
Die sechs Operatoren sind: gleich, nicht gleich, kleiner als, größer als, kleiner als oder gleich, größer als oder gleich.
Logische Operatoren
Der "und"-Block gibt dann und nur dann wahr zurück, wenn seine beiden Eingangswerte wahr sind.
Der "oder"-Block gibt wahr zurück, wenn mindestens einer seiner beiden Eingangswerte wahr ist.
"nicht"-Block
Der "nicht"-Block wandelt eine boolesche Eingabe in ihr Gegenteil um. Zum Beispiel ist das Ergebnis von:
falsch.
Wenn keine Eingabe erfolgt, wird der Wert wahr angenommen, sodass der folgende Block den Wert falsch erzeugt:
Es wird jedoch nicht empfohlen, eine Eingabe leer zu lassen.
"dreier Operator"-Block
Der dreier Operator verhält sich wie ein Miniatur-"wenn-sonst"-Block. Er nimmt drei Eingangswerte entgegen, der erste Eingangswert ist die zu testende boolesche Bedingung, der zweite Eingangswert ist der Wert, der zurückgegeben werden soll, wenn der Test wahr ergibt, der dritte Eingangswert ist der Wert, der zurückgegeben werden soll, wenn der Test falsch ergibt. Im folgenden Beispiel wird die Variable Farbe auf Rot gesetzt, wenn die Variable x kleiner als 10 ist, andernfalls wird die Variable Farbe auf Grün gesetzt.
Ein dreier Block kann immer durch einen "wenn-sonst"-Block ersetzt werden. Die folgenden zwei Beispiele sind genau gleich.
Schleifen
Der Bereich "Schleifen" enthält Blöcke, die steuern, ob andere Blöcke, die in ihrem Inneren platziert sind, ausgeführt werden. Es gibt zwei Arten von Steuerungsblöcken: "wenn-sonst"-Blöcke (die auf einer eigenen Seite beschrieben werden) und Blöcke, die steuern, wie oft ihr Inneres ausgeführt wird. Letztere werden Schleifen genannt, da ihr Inneres, auch als Schleifenkörper oder Körper bezeichnet, (möglicherweise) mehrfach wiederholt wird. Jeder Durchlauf einer Schleife wird als Iteration bezeichnet.
Blöcke zur Erstellung von Schleifen
"dauerhaft wiederholen"-Schleife
Der "dauerhaft wiederholen"-Block führt den Code in seinem Körper so lange aus, bis das Programm endet.
"wiederhole"-Schleife
Der "wiederhole"-Block führt den Code in seinem Körper, so häufig wie angegeben aus. Der folgende Block gibt zum Beispiel zehnmal "Hallo!" aus:
"wiederhole-solange"-Schleife
Stelle dir ein Spiel vor, bei dem ein Spieler einen Würfel wirft und alle geworfenen Werte addiert, solange die Summe kleiner als 30 ist. Die folgenden Blöcke implementieren dieses Spiel:
- Eine Variable namens insgesamt erhält einen Anfangswert von 0.
- Die Schleife beginnt mit einer Überprüfung, ob insgesamt kleiner als 30 ist. Wenn ja, werden die Blöcke im Körper durchlaufen.
- Eine Zufallszahl im Bereich von 1 bis 6 wird erzeugt (um einen Würfelwurf zu simulieren) und in einer Variablen namens gewürfelt gespeichert.
- Die gewürfelte Zahl wird ausgegeben.
- Die Variable insgesamt wird um gewürfelt erhöht.
- Wenn das Ende der Schleife erreicht ist, geht die Steuerung zurück zu Schritt 2.
Nach Beendigung der Schleife werden alle nachfolgenden Blöcke (nicht dargestellt) durchlaufen. Im Beispiel endet der Schleifendurchlauf, nachdem eine gewisse Anzahl von Zufallszahlen im Bereich von 1 bis 6 ausgegeben wurde, und die Variable insgesamt hat dann als Wert die Summe dieser Zahlen, die mindestens 30 beträgt.
"wiederhole-bis"-Schleife
"wiederhole solange"-Schleifen wiederholen ihren Körper, "solange" eine Bedingung erfüllt ist. "wiederhole bis"-Schleifen sind ähnlich, mit dem Unterschied, dass sie ihren Körper so lange wiederholen, "bis" eine bestimmte Bedingung erfüllt ist. Die folgenden Blöcke sind äquivalent zum vorherigen Beispiel, weil die Schleife läuft, bis insgesamt größer oder gleich 30 ist.
"zählen-von-bis"-Schleife
Die "zählen-von-bis"-Schleife erhöht einer Variable den Wert, beginnend mit einem ersten Wert, endend mit einem zweiten Wert und in Schritten von einem dritten Wert, wobei der Körper für jeden Wert der Variable einmal ausgeführt wird. Das folgende Programm gibt zum Beispiel die Zahlen 1, 3 und 5 aus.
Wie die beiden folgenden Schleifen zeigen, die jeweils die Zahlen 5, 3 und 1 ausgeben, kann dieser erste Wert größer sein als der zweite. Das Verhalten ist das gleiche, egal ob der Inkrementbetrag (dritter Wert) positiv oder negativ ist.
"für jeden"-Schleife
Der "für jeden"-Block ist ähnlich wie die "zählen-von-bis"-Schleife, nur dass er statt der Schleifenvariable in einer numerischen Reihenfolge die Werte aus einer Liste der Reihe nach verwendet. Das folgende Programm gibt jedes Element der Liste "alpha", "beta", "gamma" aus:
Schleifenabbruchblöcke
Die meisten Schleifen werden so lange durchlaufen, bis die Abbruchbedingung (bei "wiederhole"-Blöcken) erfüllt ist oder bis alle Werte der Schleifenvariable angenommen wurden (bei "zählen mit"- und "für jeden"-Schleifen). Zwei selten benötigte, aber gelegentlich nützliche Blöcke bieten zusätzliche Möglichkeiten zur Steuerung des Schleifenverhaltens. Sie können bei jeder Art von Schleife verwendet werden, auch wenn die folgenden Beispiele ihre Verwendung bei der "für jeden"-Schleife zeigen.
"sofort mit nächstem Schleifendurchlauf fortfahren"-Block
Der "sofort mit nächstem Schleifendurchlauf fortfahren"-Block bewirkt, dass die restlichen Blöcke im Schleifenkörper übersprungen werden und die nächste Iteration der Schleife beginnt.
Das folgende Programm gibt bei der ersten Iteration der Schleife "alpha" aus. Bei der zweiten Iteration wird der Block "fahre mit nächster Integration fort" ausgeführt, wodurch die Ausgabe von "beta" übersprungen wird. Bei der letzten Iteration wird "gamma" gedruckt.
"die Schleife abbrechen"-Block
Der "die Schleife abbrechen"-Block ermöglicht einen vorzeitigen Ausstieg aus einer Schleife. Das folgende Programm gibt bei der ersten Iteration "alpha" und bricht bei der zweiten Iteration aus die Schleife ab, wenn die Schleifenvariable gleich "beta" ist. Der dritte Punkt in der Liste wird nie erreicht.
Mathematik
Die Blöcke der Kategorie Mathematik werden genutzt, um Berechnungen anzustellen. Die Ergebnisse der Berechnungen können zum Beispiel als Werte für Variablen verwendet werden. Die meisten Mathematik-Blöcke beziehen sich auf allgemeine mathematische Berechnungen und sollten selbsterklärend sein.
Blöcke
Zahlen
Nutze den "Zahl"-Block, um eine beliebige Zahl in dein Programm hinzuzufügen oder einer Variable diese Zahl als Wert zuzuweisen. Dieses Programm weist der Variablen Alter die Zahl 12 zu:
Einfache Rechnungen
Dieser Block hat die Struktur Wert-Operator-Wert. Als Operatoren stehen die Rechenarten +, -, ÷, × und ^ zur Verfügung. Der Operator kann über das Dropdown-Menü ausgewählt werden. Er kann unmittelbar auf Zahlen oder auch auf Werte von Variablen angewendet werden. Beispiel:
Dieser Block gibt Ergebnis 144 (12^2) aus.
Bitoperationen
Dieser Block ermöglicht es, Bitoperationen zwischen zwei Werten durchzuführen. Der Operator für die Operation kann über ein Dropdown-Menü ausgewählt werden, das eine Reihe von Bitoperationen wie Links-Shift (<<), Rechts-Shift (>>), AND, OR, XOR und NOT anbietet. Diese Operatoren können auf Zahlen sowie auf Variablenwerte angewendet werden. Im gezeigten Beispiel wird die Links-Shift-Operation << verwendet, um die Zahl 10 um 2 Stellen nach links zu verschieben. Das Ergebnis ist 40, da die Bits der Zahl 10 (binär 1010) um zwei Stellen verschoben werden, was zu 101000 binär oder 40 dezimal führt.
Spezielle Rechnungen
Dieser Block wendet die, über das Dropdown-Menü ausgewählte Rechenart auf die dahinter platzierte Zahl oder auf den Wert der dahinter platzierten Variable an. Die zur Verfügung stehenden Rechenoperationen sind:
- Quadratwurzel,
- Betrag,
- natürlicher Logarithmus,
- dekadischer Logarithmus,
- Exponentialfunktion mit der Basis e (e^1, e^2, …),
- Exponentialfunktion mit der Basis 10 (10^1, 10^2, …),
- Vorzeichenwechsel (Multiplikation mit -1).
e ist hierbei die Euler'sche Zahl. Dieser Block zieht die Quadratwurzel aus 16 und setzt die Variable i auf das Ergebnis.
Trigonometrische Funktionen
Dieser Block funktioniert ähnlich wie der zuvor beschriebene Block, mit dem Unterschied, dass als Rechenoperationen die trigonometrischen Funktionen Sinus, Cosinus, Tangens und ihre Umkehrfunktionen genutzt werden. Die angegebene Zahl oder der Wert der angegebenen Variable wird also in die im Dropdown-Menü gewählte Funktion eingesetzt und das Ergebnis kann dann im Programm weiterverarbeitet werden. Zusätzlich gibt es noch den Block "arctan2 of X: … Y: ..., der es erlaubt, sich mithilfe von zwei reellen Zahlen (einzusetzen als X und Y) einen Funktionswert des arctan2 im Bereich von 360° ausgeben zu lassen.
Häufig verwendete Konstanten
Dieser Block funktioniert genauso wie der "Zahl"-Block, jedoch gibt man hier den Zahlenwert nicht selbst an. Stattdessen sind häufig verwendete Konstanten (z.B. π) vorgespeichert. Die Konstante kann über das Dropdown-Menü ausgewählt werden.
Prüfen auf Eigenschaften
Der Block "... ist ..." wird verwendet, um mathematische Eigenschaften einer gegebenen Zahl zu überprüfen. Im gezeigten Beispiel wird beispielsweise geprüft, ob die Zahl x eine Primzahl ist.
Eigenschaften, die der Block prüfen kann:
- Gerade: Überprüft, ob die Zahl eine gerade Zahl ist. Eine Zahl ist gerade, wenn sie ohne Rest durch 2 teilbar ist.
- Ungerade: Überprüft, ob die Zahl ungerade ist. Eine Zahl ist ungerade, wenn sie bei der Division durch 2 einen Rest von 1 lässt.
- Eine Primzahl: Wie bereits erwähnt, prüft diese Option, ob die Zahl eine Primzahl ist, das heißt, sie ist nur durch 1 und sich selbst teilbar und größer als 1.
- Eine ganze Zahl: Überprüft, ob die Zahl eine ganze Zahl ist.
- Positiv: Überprüft, ob die Zahl größer als 0 ist.
- Negativ: Überprüft, ob die Zahl kleiner als 0 ist.
- Teilbar durch: Diese Option erlaubt es zu überprüfen, ob die Zahl durch eine andere, spezifizierte Zahl teilbar ist.
- Keine Nummer: Überprüft, ob die Eingabe keine numerische Wertigkeit hat, was nützlich sein kann, um Datentypfehler zu identifizieren.
Konvertierung
Der Block "konvertiere zu ..." ermöglicht die Umwandlung einer Zahl aus dem Dezimalsystem in eine andere numerische Basis, wie Hexadezimal (hex), Binär (bin), Integer (int), Grad und Radiant. Dieser Vorgang ist besonders nützlich, wenn Daten in unterschiedlichen Darstellungsformen benötigt werden.
Runden
Mit dem "runde ..."-Block lässt sich eine angegebene Dezimalzahl oder der Wert einer angegebenen Variablen auf eine ganze Zahl runden. Dabei kann man im Dropdown-Menü drei Optionen wählen:
- mit "runde" kaufmännisch gerundet (z.B. wird 4,5 zu 5)
- mit "runde auf" wird aufgerundet (z.B. wird 5,1 zu 6)
- mit "runde ab" wird abgerundet (z.B. wird 5,9 zu 5).
Auswertung von Listen
Mit dem "der Liste"-Block kann man sich
- mit "Summe" die Summe aller Werte einer Liste,
- mit "min" den kleinsten Wert einer Liste,
- mit "max" den größten Wert einer Liste,
- mit "Mittelwert" den Mittelwert aller Werte einer Liste,
- mit "Median" den Median einer Liste,
- mit "Modalwert" den/die am häufigsten vorkommenden Wert einer Liste,
- mit "Standardabweichung" die Standardabweichung aller Werte einer Liste,
- mit "Zufallswert" einen zufälligen Wert aus einer Liste
ausgeben lassen. Alle diese Optionen können über das Dropdown-Menü des Blocks ausgewählt werden:
Rest einer Division
Der "Rest von ..."-Block wird genutzt, um den Rest einer Division auszugeben. Dieses Programm weist der Variable "Rest" den Rest der Division von 3:2, also 1, zu:
Eingabewerte einschränken
Der "beschränke ... von ... bis ..." Block erlaubt es, Eingabewerte auf ein bestimmtes Intervall zu beschränken. Bevor ein Eingabewert weiterverarbeitet wird, wird getestet, ob er im festgelegten Intervall liegt. Es gibt drei Optionen, wie mit einem eingegebenen Wert verfahren wird:
- Der Wert liegt im Intervall, also wird er unverändert weitergegeben.
- Der Wert liegt unter der unteren Grenze des Intervalls, also wird diese untere Grenze weitergegeben.
- Der Wert liegt über der oberen Grenze des Intervalls, also wird diese obere Grenze weitergegeben.
In diesem Beispiel wird der Block genutzt, um den Wert der Variable "Geschwindigkeit" auf die vom Motor unterstützten Drehzahlen einzuschränken:
Zufällige Werte generieren
Die beiden Blöcke "zufällige Zahl von ... bis …" und "zufälliger Bruch" geben einen zufälligen Wert aus. Dabei gibt der "zufällige Zahl von ... bis …"-Block eine Zahl aus dem definierten Intervall aus. Der Block "zufälliger Bruch" gibt hingegen einen Wert zwischen 0,0 (eingeschlossen) und 1,0 (ausgeschlossen) aus.
Wertebereiche mappen
Der Block "verteile ... von niedrig ... von hoch ... zu niedrig ... zu hoch" nimmt den ersten Wert und transformiert ihn von einem durch die Parameter 2 und 3 definierten Ursprungsbereich auf einen durch die Parameter 4 und 5 festgelegten Zielbereich ab. Dies ermöglicht es, den Eingabewert entsprechend einer linearen Skalierung in den neuen Wertebereich zu überführen.
In dem gezeigten Beispiel des Programmblocks wird der Wert 5 verwendet. Dieser Wert 5 wird von einem definierten Ursprungsbereich von 0 bis 8 in einen Zielbereich von 0 bis 512 transformiert. Die Transformation erfolgt nach einer linearen Skalierungsregel, sodass der ursprüngliche Wert proportional in den neuen Wertebereich übertragen wird. Konkret bedeutet dies, dass der Wert 5 – der etwas über der Mitte des Ursprungsbereichs liegt – in einen entsprechenden Wert im Zielbereich umgerechnet wird. Da 5 genau 62.5 % des Weges von 0 bis 8 darstellt, wird dieser Prozentsatz auf den neuen Bereich von 0 bis 512 angewendet, was zu einem umgerechneten Wert von 320 führt (62.5 % von 512).
Text
Text kann Buchstaben (klein oder großgeschrieben), Zahlen, Satzzeichen, andere Symbole und Leerzeichen enthalten.
Beispiele für Texte sind:
- "Ding 1"
- "12. März 2010"
- "" (leerer Text)
Blöcke
Erstellung von Text
Der folgende Block erzeugt den Text "Hallo" und speichert ihn in der Variablen namens "Gruß":
Der Block "erstelle Text aus" kombiniert den Wert der Variable "Gruß" und den neuen Text "Welt" zu dem Text "HalloWelt". Beachte, dass zwischen beiden Texten kein Leerzeichen steht, da in den beiden ursprünglichen Texten keines vorhanden war.
Um die Anzahl der Texteingaben zu erhöhen, klicke auf das (+) Symbol. Um die letzte Ausgabe zu entfernen, klicke auf das (-) Symbol.
Text ausgeben
Der "gib aus"-Block bewirkt, dass der Eingabewert im Konsole-Fenster ausgegeben wird:
Auf keinen Fall wird er an den Drucker geschickt, wie der Name vielleicht vermuten lässt.
Änderung von Text
Der Block "an ... anhängen" fügt den angegebenen Text an die angegebene Variable an. In diesem Beispiel ändert er den Wert der Variable "Gruß" von "Hallo" in "Hallo, da!":
Textlänge
Der "Länge von"-Block zählt die Anzahl der Zeichen (Buchstaben, Zahlen usw.), die in einem Text enthalten sind. Die Länge von "Wir sind #1!" ist 12, und die Länge des leeren Textes ist 0.
Prüfen auf leeren Text
Der Baustein "ist leer" prüft, ob der angegebene Text leer ist (die Länge 0 hat). Das Ergebnis ist im ersten Beispiel "wahr" und im zweiten Beispiel "falsch".
Suchen von Text
Diese Blöcke können verwendet werden, um zu prüfen, ob ein Text in einem anderen Text vorkommt und wenn ja, wo er vorkommt. Zum Beispiel wird hier nach dem ersten Vorkommen von "a" in "Hallo" gefragt, das Ergebnis ist 2:
Dies fragt nach dem letzten Vorkommen von "a" in "Hallo", was ebenfalls 2 ergibt:
Unabhängig davon, ob das erste oder letzte Vorkommen ausgewählt wird, liefert dieser Block das Ergebnis 0, da "Hallo" kein "z" enthält.
Extrahieren von Text
Extrahieren eines einzelnen Zeichens
Dies ergibt "b", den zweiten Buchstaben in "abcde":
Dies liefert "d", den vorletzten Buchstaben in "abcde":
Dies liefert "a", den ersten Buchstaben in "abcde":
Dies erhält "e", den letzten Buchstaben in "abcde":
Dies erhält jeden der 5 Buchstaben in "abcde" mit gleicher Wahrscheinlichkeit:
Keiner von ihnen verändert den Text, aus dem extrahiert wird.
Extrahieren eines Textbereichs
Mit dem "im Text ... liefer Zeichenkette"-Block kann ein Textbereich extrahiert werden, der entweder mit:
- Buchstabe #
- Buchstabe # vom Ende
- erster Buchstabe
startet und mit:
- Buchstabe #
- Buchstabe # vom Ende
- letzter Buchstabe
endet.
Im folgenden Beispiel wird "abc" extrahiert:
Anpassen der Groß-/Kleinschreibung des Textes
Dieser Block erzeugt eine Version des Eingabetextes, die entweder in
- GROßSCHREIBUNG (alle Buchstaben in Großbuchstaben) oder
- kleinschreibung (alle Buchstaben sind Kleinbuchstaben) oder
- Substantive (erste Buchstaben Großbuchstaben, andere Buchstaben Kleinbuchstaben).
Das Ergebnis des folgenden Blocks ist "HALLO":
Nicht-alphabetische Zeichen sind davon nicht betroffen. Beachte, dass dieser Block auf Text in Sprachen ohne Groß- und Kleinschreibung, wie z. B. Chinesisch, nicht wirkt.
Trimmen (Entfernen) von Leerzeichen
Der folgende Block entfernt, je nachdem, was im Dropdown-Menü (kleines Dreieck) eingestellt wird, Leerzeichen:
- am Anfang des Textes
- am Ende des Textes
- an beiden Seiten des Textes
Das Ergebnis des folgenden Blocks ist "Hi du".
Leerzeichen in der Mitte des Textes sind nicht betroffen.
Text mit Formatierung ausgeben
Mit dem "formatiere text"-Block können Textausgaben mit Variableninhalt formatiert ausgegeben werden. Dabei werden alle Platzhalter "{}" im Text durch den Inhalt der nach dem Text angehängten Variablen ersetzt. In den geschweiften Klammern kann eine Formatierung angegeben werden. Die Formatierung "{:.1f}" gibt z.B. nur die erste Nachkommastelle der Kommazahl in der Variablen "t" aus.
Datei
In ROBO Pro Coding werden Ordner als spezielle Arten von Dateien betrachtet, die zur Organisation und Strukturierung von Projektdaten dienen. Daher werden in diesem Abschnitt sowohl Dateien als auch Ordner behandelt.
Dateien
Datei öffnen
Der Block "Datei ... mit Modus ... öffnen" ermöglicht das Öffnen einer Datei in einem ausgewählten Modus. Dieser Block ist in zwei Varianten verfügbar:
- Dropdown-Auswahl: Diese Variante zeigt alle vorhandenen Dateien im data-Verzeichnis des Projektordners im Dropdown-Menü an.
- Freie Eingabe: Diese Option erlaubt, den Namen einer Datei direkt einzugeben. Diese Flexibilität ermöglicht das Erstellen einer neuen Datei, falls diese beim Schreiben nicht bereits existiert. Gleichzeitig ermöglicht es den Zugriff auf bereits bestehende Dateien. Dies ist besonders vorteilhaft für dynamisches Arbeiten mit verschiedenen Dateinamen, die nicht im Voraus bekannt sind.
Mögliche Modi zum Öffnen sind:
- Lesen: Öffnet die Datei zum Lesen von Inhalten.
- Schreiben: Öffnet die Datei, um Inhalte zu überschreiben.
- Anhängen: Öffnet die Datei, um Inhalte am Ende der Datei anzuhängen, ohne bestehende Inhalte zu überschreiben.
Bei Ausführung gibt der Block einen Dateideskriptor zurück, der in nachfolgenden Befehlen genutzt werden kann, um die Datei zu lesen, zu schreiben oder Daten anzuhängen.
Das folgende Beispiel illustriert die Verwendung des Blocks, um die Datei meineDatei.json im Lesemodus zu öffnen, die sich im data-Verzeichnis befindet. Der Dateideskriptor wird in der Variable datei gespeichert:
Überprüfung der Existenz einer Datei
Der Block "existiert" ermöglicht es zu prüfen, ob eine spezifische Datei bereits existiert. Auf Basis dieser Prüfung können unterschiedliche Aktionen ausgeführt werden.
In dem Beispiel wird der "existiert"-Block genutzt, um zu prüfen, ob die Datei bereits vorhanden ist:
- Wenn die Datei existiert: Der Controller gibt die Nachricht „Die Datei existiert schon!“ aus.
- Wenn die Datei nicht existiert: Die Datei meineDatei.json wird erstellt und geöffnet. Zunächst wird ein Dateideskriptor erstellt, der in den folgenden Schritten verwendet wird, um auf die Datei zuzugreifen. Anschließend wird der Text „Hallo Welt“ in die Datei geschrieben und die vorgenommenen Änderungen werden gespeichert. Schließlich wird der Dateideskriptor geschlossen, um die Datei ordnungsgemäß zu schließen und Ressourcen freizugeben.
Datei als Text einlesen
Der Block "Datei ... als Text lesen" ermöglicht es, den Inhalt einer Datei einzulesen. Dieser Prozess ist besonders nützlich, um Daten aus einer Datei zu extrahieren und sie weiterzuverarbeiten.
Im Beispiel wird die Datei zunächst im Lesemodus geöffnet, dann wird der Inhalt der Datei in eine Variable namens inhalt geladen. Anschließend wird dieser Inhalt ausgegeben. Schließlich wird die Datei wieder geschlossen, um die Ressourcen ordnungsgemäß freizugeben.
Datei zeilenweise als Liste einlesen
Der Block "Datei ... zeilenweise als Liste lesen" ermöglicht es, den Inhalt einer Datei zeilenweise in Form einer Liste einzulesen, wobei jedes Listenelement eine Zeile repräsentiert. Dieser Prozess ist besonders nützlich, um die Zeilen aus einer Datei zu extrahieren und sie weiterzuverarbeiten.
Im dargestellten Beispiel wird der Prozess zur Verwendung dieses Blocks demonstriert. Zunächst wird die Datei meineDatei.json im Lesemodus (read) geöffnet. Der Inhalt der Datei wird dann zeilenweise gelesen und in einer Liste gespeichert. Jede Zeile der Datei wird als ein separates Element in der Liste liste gespeichert. Es folgt eine Schleife, in der jedes Element der Liste (jede Zeile) durchlaufen und mittels "gib aus" ausgegeben wird. Nachdem alle Zeilen verarbeitet wurden, wird die Datei geschlossen, um die Ressourcen freizugeben.
Schreiben in einer Datei
Der Block "Schreibe ... in Datei ... neue Zeile am Ende" ermöglicht das Schreiben von Text in eine Datei. Optional kann ein Zeilenumbruch (\n) am Ende des Textes eingefügt werden, um die Lesbarkeit bei mehreren Schreibvorgängen zu verbessern.
Im Beispiel wird die Datei meineDatei.json im Anhäng-Modus (append) geöffnet. Anschließend wird der Text „Hallo Welt“ in die Datei geschrieben. Dies führt dazu, dass der Inhalt an das Ende der bestehenden Daten in der Datei angehängt wird, ohne die vorhandenen Inhalte zu überschreiben. Nach dem Schreiben werden die Änderungen gespeichert und die Datei geschlossen.
Liste zeilenweise in die Datei schreiben
Der Block "Liste ... zeilenweise in die Datei ... schreiben" ermöglicht das Schreiben einer Liste in eine Datei, wobei jedes Element der Liste in eine eigene Zeile geschrieben wird. Dies ist besonders nützlich für ein strukturiertes Speichern von Daten, bei denen jedes Listenelement klar von den anderen getrennt ist.
Im dargestellten Beispiel wird die Datei meineDatei.json zunächst im Schreibmodus geöffnet. Dies bedeutet, dass, falls die Datei bereits vorhanden ist, alle existierenden Inhalte überschrieben werden. Anschließend wird eine Liste mit den Elementen "Erste Zeile!" und "Zweite Zeile!" erstellt. Diese Elemente werden dann zeilenweise in die Datei geschrieben, sodass jede Zeile der Datei einem Element der Liste entspricht. Nachdem die Liste in die Datei geschrieben wurde, werden die Änderungen übernommen, um die neu geschriebenen Daten zu sichern. Zum Abschluss des Prozesses wird die Datei geschlossen, um den Zugriff ordnungsgemäß zu beenden.
Änderungen in die Datei schreiben
Dieser Block "Änderungen in Datei ... übernehmen" stellt sicher, dass alle Änderungen, die an der geöffneten Datei vorgenommen wurden, auch tatsächlich gespeichert werden. Er führt im Wesentlichen einen Flush-Vorgang aus, bei dem alle bislang gepufferten Daten in den permanenten Speicher der Datei geschrieben werden. Nachdem Inhalte in die Datei geschrieben oder modifiziert wurden, sollte dieser Block verwendet werden, um die Änderungen festzuschreiben.
Datei schließen
Der Block "Datei ... schließen" wird verwendet, um eine geöffnete Datei ordnungsgemäß zu schließen.
Ordner
Ordner erstellen
Der Block "Verzeichnis ... erstellen" ermöglicht es, ein neues Verzeichnis zu erstellen, falls es bisher nicht existiert.
Überprüfung der Existenz eines Ordners
Der Block "existiert" ermöglicht es zu prüfen, ob ein spezifischer Ordner bereits existiert. Auf Basis dieser Prüfung können unterschiedliche Aktionen ausgeführt werden.
In dem Beispiel wird der "existiert"-Block genutzt, um zu prüfen, ob der Ordner bereits vorhanden ist:
- Wenn der Ordner existiert: Der Controller gibt die Nachricht „Der Ordner existiert schon!“ aus.
- Wenn der Ordner nicht existiert: Der Block "Verzeichnis meinOrdner erstellen" wird ausgeführt, um den Ordner zu erstellen.
Datenstrukturen
Listen
Erstellen einer Liste
erzeuge Liste mit
Mit dem Block "erzeuge Liste mit" kann man die Anfangswerte in einer neuen Liste angeben. In diesem Beispiel wird eine Liste von Wörtern erstellt und in einer Variablen namens "Buchstaben" abgelegt:
Wir bezeichnen diese Liste als ["alpha", "beta", "gamma"].
Dies zeigt die Erstellung einer Liste von "Zahlen":
So wird eine Liste von "Farben" erstellt:
Es ist weniger üblich, aber möglich, eine Liste mit Werten unterschiedlichen Typs zu erstellen:
Anzahl der Eingänge ändern
Um die Anzahl der Eingänge zu ändern, klicke beziehungsweise tippe auf das (+) oder (-) Symbol. Dadurch werden neue Eingänge hinzugefügt oder wieder entfernt.
Liste mit Element erstellen
Mit dem Block "erstelle Liste mit Element" kannst du eine Liste erstellen, die die angegebene Anzahl von Kopien eines Elements enthält. Die folgenden Blöcke setzen zum Beispiel die Variable "Wörter" auf die Liste ["sehr", "sehr", "sehr"].
Prüfen der Länge einer Liste
ist leer
Der Wert eines "ist leer"-Blocks ist "wahr", wenn seine Eingabe die leere Liste ist, und "falsch", wenn es irgendetwas anderes ist. Ist diese Eingabe "wahr"? Der Wert des folgenden Blocks wäre "falsch", weil die Variable Farben nicht leer ist: Sie hat drei Elemente.
Beachte die Ähnlichkeit mit dem "ist leer"-Block für Text.
Länge von
Der Wert des "Länge von"-Blocks ist die Anzahl der Elemente, die sich in der als Eingabe verwendeten Liste, befinden. Der Wert des folgenden Blocks wäre z. B. 3, da "Farbe" drei Elemente hat:
Beachte, dass der "Länge von"-Block angibt, wie viele Elemente in der Liste enthalten sind, und nicht, wie viele verschiedene Elemente in ihr enthalten sind. Zum Beispiel hat das Folgende den Wert 3, obwohl "Wörter" aus drei Kopien desselben Textes besteht:
Beachte die Ähnlichkeit mit dem Block "Länge von" für Text.
Suchen von Elementen in einer Liste
Diese Blöcke finden die Position eines Elements in einer Liste. Das folgende Beispiel hat den Wert 1, weil das erste Auftreten von "sehr" am Anfang der Wortliste steht (["sehr", "sehr", "sehr"]).
Das Ergebnis des Folgenden ist 3, weil das letzte Auftreten von "sehr" in "Wörter" an Position 3 ist.
Wenn das Element nirgendwo in der Liste vorkommt, ist das Ergebnis der Wert 0, wie in diesem Beispiel:
Diese Blöcke verhalten sich analog zu den Blöcken für das Finden von Buchstaben im Text.
Abrufen von Elementen aus einer Liste
Abrufen eines einzelnen Elements
Erinnere dich an die Definition der Liste "Farben":
Der folgende Block erhält die Farbe Blau, weil es das zweite Element in der Liste ist (von links beginnend gezählt):
Dieser erhält Grün, weil es das zweite Element ist (vom rechten Ende aus gezählt):
Dieser erhält das erste Element, Rot:
Dies erhält das letzte Element, Gelb:
Dies wählt zufällig ein Element aus der Liste aus, wobei mit gleicher Wahrscheinlichkeit eines der Elemente Rot, Blau, Grün oder Gelb zurückgegeben wird.
Abrufen und Entfernen eines Elements
Mit dem Dropdown-Menü wird der Block "aus Liste ... abrufen" in den Block "aus Liste ... abrufen und entfernen" geändert, der die gleiche Ausgabe liefert, aber auch die Liste verändert:
Dieses Beispiel setzt die Variable "erster Buchstabe" auf "alpha" und lässt die restlichen Buchstaben (["beta", "gamma"]) in der Liste.
Entfernen eines Eintrags
Wenn du im Dropdown-Menü "entfernen" wählst, verschwindet die Nase links vom Block:
Damit wird das erste Element aus "Buchstaben" entfernt.
Eine Subliste abrufen
Der Block "aus Liste ... Subliste abrufen" ähnelt dem Block in "aus Liste ... abrufen" mit dem Unterschied, dass er eine Subliste extrahiert und nicht ein einzelnes Element. Es gibt mehrere Optionen, den Anfang und das Ende der Subliste anzugeben:
In diesem Beispiel wird eine neue Liste "erster Buchstabe" erstellt. Diese neue Liste hat zwei Elemente: ["alpha", "beta"].
Beachte, dass dieser Block die ursprüngliche Liste nicht verändert.
Hinzufügen von Elementen an eine Liste
Elemente in einer Liste ersetzen
Der Block "in Liste ... ersetze" ersetzt das Element an einer bestimmten Stelle einer Liste durch ein anderes Element.
Die Bedeutung der einzelnen Dropdown-Optionen findest du im vorherigen Abschnitt.
Das folgende Beispiel bewirkt zwei Dinge:
- Die Liste "Wörter" wird mit 3 Elementen erstellt: ["sehr", "sehr", "sehr"].
- Das dritte Element in der Liste wird durch "gut" ersetzt. Der neue Wert von "Wörter" ist ["sehr", "sehr", "gut"]
Elemente an einer bestimmten Stelle in eine Liste einfügen
Der "in Liste ... einfügen bei"-Block wird über das Dropdown-Menü des "in Liste ... ersetze"-Blocks aufgerufen:
Er fügt ein neues Element an der angegebenen Stelle in die Liste ein, und zwar vor dem Element, das sich zuvor an dieser Stelle befand. Das folgende Beispiel (das auf einem früheren Beispiel aufbaut) tut drei Dinge:
- Die Liste "Wörter" wird mit 3 Elementen erstellt: ["sehr", "sehr", "sehr"].
- Das dritte Element in der Liste wird durch "gut" ersetzt. Der neue Wert von "Wörter" ist somit ["sehr", "sehr", "gut"].
- Das Wort "Sei" wird am Anfang der Liste eingefügt. Der endgültige Wert von "Wörter" ist somit ["Sei", "sehr", "sehr", "gut"].
Zeichenketten aufteilen und Listen zusammenfügen
Eine Liste aus einem Text erstellen
Der Baustein "erstelle Liste aus Text" zerlegt den angegebenen Text mithilfe eines Begrenzungszeichens in Teile:
Im obigen Beispiel wird eine neue Liste zurückgegeben, die drei Textstücke enthält: "311", "555" und "2368".
Ein Text aus einer Liste erstellen
Der Baustein "erstelle Text aus Liste" fügt eine Liste mithilfe eines Trennzeichens zu einem einzigen Text zusammen:
Im obigen Beispiel wird ein neuer Text mit dem Wert zurückgegeben: "311-555-2368".
Eine Liste sortieren
Der "Sortieren"-Block ist ein flexibles Werkzeug, das es ermöglicht, Listen anhand verschiedener Kriterien zu ordnen, die basierend auf dem Typ der Elemente in der Liste ausgewählt werden.
-
Typ der Elemente:
- Numerisch: Für Listen mit Zahlen. Sortiert die Elemente basierend auf ihrem numerischen Wert.
- Alphabetisch: Für Listen mit Text. Sortiert die Elemente nach dem Alphabet. Die Sortierung berücksichtigt auch die Groß- und Kleinschreibung,
- Alphabetisch, Großschreibung ignorieren: Sortiert Texte alphabetisch, wobei Groß- und Kleinschreibung nicht unterschieden wird.
-
Sortierreihenfolge:
- Aufsteigend: Sortiert die Liste von kleinsten zu größten Werten (oder von A bis Z).
- Absteigend: Sortiert die Liste von größten zu kleinsten Werten (oder von Z bis A).
Im gezeigten Beispiel wird eine Liste mit den numerischen Werten 20, 10 und 100 erstellt und einer Variablen namens "liste" zugewiesen. Anschließend wird der "Sortieren"-Block verwendet, um die Daten numerisch in aufsteigender Reihenfolge zu ordnen. Die sortierten Daten werden dann einer neuen Variablen namens "sortiereListe" zugewiesen. Nach der Sortierung enthält "sortiereListe" die Werte in folgender Reihenfolge: 10, 20, 100. Die Reihenfolge der Liste "liste" ist unverändert.
Verwandte Blöcke
Drucken einer Liste
Der "drucken"-Baustein in der Kategorie Text kann Listen ausgeben. Das Ergebnis des folgenden Programms ist die abgebildete Konsolenausgabe:
Etwas für jedes Element in einer Liste durchführen
Der "für-jeden"-Block in der Kategorie Steuerung führt eine Operation für jedes Element in einer Liste aus. Dieser Block druckt zum Beispiel jedes Element in der Liste einzeln aus:
Dadurch werden die Elemente nicht aus der ursprünglichen Liste entfernt.
Map
Eine Map, auch bekannt als Dictionary oder Assoziatives Array, ist eine Sammlung von Schlüssel-Wert-Paaren, bei der jeder eindeutige Schlüssel direkt auf einen Wert verweist.
Alle Schlüssel einer Map zurückgeben
Der Block "in der Map ... gib alle Schlüssel" kann dazu verwendet werden, alle Schlüssel aus einer Map zurückzugeben.
In dem Beispiel holt der Block aus der Map "map" alle Schlüssel und gibt jeden in einer Schleife aus. Dies könnte genutzt werden, um zu sehen, welche Schlüssel überhaupt in der Map gespeichert sind:
Elements zurückgeben
Der Block "in der Map ... gib Element des Schlüssel ..." kann dazu verwendet werden, um den Wert eines bestimmten Schlüssels aus der Map zurückzugeben.
In dem Beispiel holt der Block, nachdem alle Schlüssel der Map "map" abgerufen wurden, für jeden Schlüssel den entsprechenden Wert. Dieser wird anschließend mit dem "gib aus"-Block ausgegeben. Dies demonstriert, wie man sequenziell durch eine Map iteriert und sowohl Schlüssel als auch Werte verarbeitet.
Element zu einer Map setzen
Der Block "in der Map ... zum Schlüssel ... setze Element ..." fügt einer Map ein neues Schlüssel-Wert-Paar hinzu oder aktualisiert den Wert eines bestehenden Schlüssels. Dies ist grundlegend für das Hinzufügen oder Modifizieren von Daten in einer Map.
Im Beispiel werden zwei Schlüssel-Wert-Paare in die Map "map" eingefügt:
- "ersterSchluessel" erhält den Zeichenkettenwert "erstesElement".
- "zweiterSchluessel" erhält den Zeichenkettenwert "zweitesElement".
Falls diese Schlüssel bereits in der Map existieren, werden ihre Werte mit den neuen Einträgen überschrieben. Andernfalls werden die Schlüssel und ihre zugehörigen Werte neu hinzugefügt. Es ist wichtig zu beachten, dass die Werte in einer Map nicht auf Zeichenketten beschränkt sind; sie können vielfältige Datentypen umfassen, einschließlich, aber nicht beschränkt auf, Zahlen, Listen oder sogar andere Maps.
JSON
JSON (JavaScript Object Notation) ist ein textbasiertes Datenformat, das für den Datenaustausch im Web genutzt wird. Es ist leicht lesbar und einfach zu handhaben. JSON strukturiert Daten als Sammlung von Schlüssel-Wert-Paaren, ähnlich wie Dictionaries oder Maps.
Konvertierung JSON zu Map
Der "JSON zu Map"-Block nimmt einen JSON-String als Eingabe und konvertiert diesen in eine Map. Jedes Schlüssel-Wert-Paar im JSON-String wird zu einem Eintrag in der Map.
Im Beispiel wird der JSON-String {"name": "Max", "age": 25} in eine Map umgewandelt. Diese Map enthält dann die Schlüssel "name" mit dem Wert "Max" und "age" mit dem Wert "25".
Konvertierung Map zu JSON
Der "Map zu JSON"-Block ermöglicht die Umwandlung von Map-Datenstrukturen in einen JSON-String. Dieser Vorgang ist besonders nützlich, wenn die strukturierten Daten einer Map für eine Datenübertragung oder als Konfigurationsdatei in einem standardisierten Format benötigt werden.
Util
Die Kategorie Util beinhaltet bei ROBO Pro Coding Blöcke folgender Art:
- Farbauswahl
- Warten
- Python Code
- Funktionsausführung
- Zeitstempel
Farbauswahl
Dieser Block dient als Eingabewert, wenn nach einer Farbe gefragt wird (z.B. beim Farbabgleich durch die Kamera). Durch Klicken bzw. Tippen auf die Farbe kann aus einer Farbpalette ausgewählt werden.
Warten
Warten, bis die Zeit abgelaufen ist
Der Block "warte ... " hindert das Programm für die angegebene Wartezeit daran, weiterzulaufen. Dabei kann im Dropdown-Menü (kleines Dreieck) die Zeiteinheit und im Eingabefeld dahinter die gewünschte Länge der Pause gewählt werden. Im untenstehenden Beispiel wird beispielsweise eine Wartezeit von einer Sekunde festgelegt.
Warten mit Bedingung
Beim "warte bis"-Block ist die Pause nicht an die Zeit, sondern an die Erfüllung einer Bedingung (z.B. ob ein Taster gedrückt ist) geknüpft. Die Bedingung wird an den "warte bis"-Block angehängt.
Im gezeigten Beispiel lautet die Bedingung "ist Mini-Taster RX_L1 geöffnet". Das führt dazu, dass das Programm anhält und wartet, dass der Mini-Taster RX_L1 in den Zustand "geöffnet" übergeht, bevor das Programm weitermacht.
Python-Code
Möchte man bestehenden Python-Code in ROBO Pro Coding integrieren, so kann man ihn in den "Python Code"-Block einfügen. Das Programm führt dann alles aus, was in dem Block in Python geschrieben wurde. Der Block "Python-Importe" ermöglicht es, notwendige Bibliotheken zu importieren, die für die Ausführung des Codes erforderlich sind.
In dem Beispiel wird der euklidische Algorithmus zur Bestimmung des größten gemeinsamen Teilers (GGT) zweier Zahlen dargestellt. Innerhalb des Blocks wird Python-Code geschrieben. Eine while-Schleife beginnt, die solange läuft, bis b nicht gleich 0 ist. Dies ist der Kern des euklidischen Algorithmus, bei dem wiederholt der Rest der Division von a durch b berechnet wird, und a und b dann aktualisiert werden. a bekommt den Wert von b, und b den Rest der Division a % b. Sobald b 0 wird (was bedeutet, dass kein Rest mehr vorhanden ist und der Algorithmus sein Ende erreicht hat), ist der Wert in a der GGT der ursprünglich eingegebenen Werte 60 und 48, also 12.
Funktionsausführung
Mit dem "führe Funktion ... in einem Thread aus"-Block lässt sich die ausgewählte Funktion in einem separaten Thread ausführen. Ein Thread ist im Wesentlichen ein Weg für ein Programm, mehrere Aufgaben gleichzeitig (parallel) auszuführen. Diese Maßnahme kann zum Beispiel ermöglichen, dass ein Programm weiterhin auf Eingaben reagieren kann, während es andere zeitaufwendige Aufgaben ausführt.
Das unten stehende Beispiel zeigt, wie eine Python-Funktion in einem separaten Thread ausgeführt werden kann, um Mehrfachaufgaben innerhalb des Programms zu ermöglichen. Zunächst wird eine Funktion "etwas tun" definiert und diese wird dann in einem Thread gestartet. Die Funktion "etwas tun" beinhaltet Python-Code, der eine zeitaufwendige Aufgabe simuliert. Durch das Verwenden des Threads kann die zeitaufwendige Funktion im Hintergrund ausgeführt werden, während der Hauptthread weiterläuft. Dies verhindert, dass das gesamte Programm während der Ausführung der Funktion für 10 Sekunden blockiert wird. Unmittelbar nach dem Starten des Threads druckt das Hauptprogramm den Text "Der Text wird direkt ausgegeben!". Da der Hauptthread durch den Start des Nebenthreads nicht blockiert wird, erfolgt diese Ausgabe sofort, ohne auf das Ende der Funktion etwas tun zu warten.
Zeitstempel
Der Block "Zeitstempel" wird verwendet, um den aktuellen Zeitpunkt (in Sekunden oder Millisekunden seit dem Beginn der Programmausführung) zu erfassen. Dies wird typischerweise genutzt, um einen genauen Zeitpunkt zu markieren, an dem etwas im Programm beginnt oder endet. Der Zeitstempel wird in einer Variablen gespeichert und kann verwendet werden, um die Dauer von Ereignissen zu messen, indem man die Differenz zwischen einem Anfangs- und einem Endzeitstempel berechnet.
Im Beispiel wird der Zeitstempel genutzt, um die Dauer der Methode "etwas tun" zu messen. Die Verwendung der Start- und Endzeitstempel ermöglicht es, genau zu bestimmen, wie lange die durch den "etwas tun"-Block repräsentierte Aktion dauert.
Variablen
Wir verwenden den Begriff Variable so, wie er in der Mathematik und in anderen Programmiersprachen verwendet wird: ein benannter Wert, der verändert (variiert) werden kann. Variablen können auf verschiedene Arten erstellt werden.
- Einige Blöcke wie "zähle mit" und "für jeden" verwenden eine Variable und definieren ihre Werte. Ein traditioneller Informatik-Begriff für solche Variablen lautet Schleifenvariablen.
- Benutzerdefinierte Funktionen (auch als "Prozeduren" bezeichnet) können Eingaben definieren, wodurch Variablen erzeugt werden, die nur innerhalb dieser Funktion verwendet werden können. Solche Variablen werden traditionell als "Parameter" oder "Argumente" bezeichnet.
- Benutzer können jederzeit Variablen über den "setze"-Block verändern. Diese werden traditionell als "globale Variablen" bezeichnet. Sie sind überall im Code von ROBO Pro Coding verwendbar.
Dropdown-Menü
Wenn du auf das Dropdown-Symbol (kleines Dreieck) einer Variable klickst, erscheint das folgende Menü:
Das Menü bietet die folgenden Optionen.
- die Anzeige der Namen aller vorhandenen, im Programm definierten Variablen.
- "Variable umbenennen …", d.h. die Änderung des Namens dieser Variable, wo immer sie im Programm erscheint (die Auswahl dieser Option öffnet eine Abfrage für den neuen Namen)
- "Variable löschen …", d.h. das Löschen aller Blöcke, die auf diese Variable verweisen, wo immer sie im Programm vorkommt.
Blöcke
Festlegen
Der "setze"-Block weist einer Variablen einen Wert zu und legt die Variable an, falls sie bisher nicht existiert. Zum Beispiel wird so der Wert der Variable "Alter" auf 12 gesetzt:
Abrufen
Der "rufe ab"-Block liefert den in einer Variablen gespeicherten Wert, ohne ihn zu verändern:
Es ist möglich, aber eine schlechte Idee, ein Programm zu schreiben, in dem ein "rufe ab"-Block ohne einen entsprechenden vorherigen "setze"-Block vorkommt.
Ändern
Der "ändere"-Block fügt eine Zahl zu einer Variablen hinzu.
Der "ändere"-Block ist eine Abkürzung für das folgende Konstrukt:
Beispiel
Betrachte den folgenden Beispielcode:
Die erste Reihe von Blöcken erzeugt eine Variable namens "Alter" und setzt ihren Anfangswert auf die Zahl 12. Die zweite Reihe von Blöcken ruft den Wert 12 ab, addiert 1 dazu und speichert die Summe 13 in der Variablen. In der letzten Zeile wird die Meldung ausgegeben: "Herzlichen Glückwunsch! Du bist jetzt 13".
Funktionen
Funktionen dienen dazu, Teile des Codes wiederverwendbar zu machen und dadurch den Code insgesamt zu strukturieren. Füllt man einen Funktionsblock, so erscheint im Funktionen-Menü ein neuer Block, der den gleichen Namen trägt wie ebendieser Funktionsblock. Es ist nun möglich, in das Hauptprogramm nur noch den Block mit dem Namen der Funktion einzusetzen. Wenn das Programm durchlaufen wird, leitet dieser Block zum Code in der gleichnamigen Funktion weiter und arbeitet diesen ab.
Einfache Funktion
Mit dem einfachen Funktionsblock lässt sich eine Funktion erstellen, die den im Textfeld eingegebenen Namen trägt. Die Funktion kann beliebig viele Variablen enthalten, die über das (+) Symbol hinzugefügt werden können. Diese Funktion "Altern" addiert 1 zu der Variable "Alter":
Die Funktion kann dann im Hauptprogramm genutzt werden:
Funktion mit Rückgabewert
Dieser Block erlaubt es, eine Funktion mit Rückgabewert zu erstellen. Dieser Rückgabewert kann dann im Hauptprogramm weiterverwendet werden. Hier ein Beispiel:
Bedingtes Zurückspringen
Der Block "falls" kann verwendet werden, um vorzeitig aus einer Funktion herauszuspringen. Abhängig von der spezifischen Anforderung der Funktion kann dieser Block entweder einen Rückgabewert liefern oder keinen Rückgabewert benötigen. Im Münzwurf-Beispiel prüft der Block die Bedingung, ob die Zufallszahl x, die zwischen 1 und 100 liegt, kleiner oder gleich 50 ist. Wenn wahr (die Zahl ist 50 oder weniger): Die Funktion gibt den Wert 0 zurück. Dies kann als Symbol für Kopf bei einem Münzwurf interpretiert werden. Wenn falsch (die Zahl ist größer als 50): Die Funktion gibt den Wert 1 zurück, was als Zahl interpretiert werden kann.
Machine Learning
Die Gruppe "Machine Learning" enthält Blöcke zur Verwendung mit dem TensorFlow-Projekt und der USB-Kamera.
Erstellt eine Bildanalyse für ein Model im Pfad path auf dem TXT 4.0 Controller.
Erstellt eine Objekterkennung mit einem Standardmodell "Sortierstrecke mit KI".
Erstellt eine Objekterkennung für ein Model im Pfad path auf dem TXT 4.0 Controller.
Analysiert ein Bild mit einer Objekt- oder Bilderkennung. Ausgegeben werden die erkannten Eigenschaften, deren Wahrscheinlichkeit und bei einer Objekterkennung deren Position. Das Ergebnis dieses Blocks kann in eine Variable geschrieben werden, um dieses später im „get value of result item [item]“ Block auszuwerten.
Gibt einen einzelnen Wert einer Eigenschaft des x-ten Ergebnisses einer Bild- oder Objektanalyse aus. Item kann dabei entweder direkt der „process image“ Block oder dessen Ergebnisse aus einer Variable sein.
Importe
Importe enthält alle Funktionen aus selbst definierten Modulen in "lib". Funktionen dienen dazu, Teile des Codes wieder verwendbar zu machen und dadurch den Code insgesamt zu strukturieren (siehe "Funktionen").
Eine kurze Anleitung illustriert Schritt für Schritt, wie man eine neue Datei erstellt, Funktionen definiert, diese in einer Bibliothek organisiert und anschließend in einem Hauptprogramm importiert und verwendet.
Der Prozess beginnt mit dem Klick auf das „+“-Symbol im Projektnavigator, um eine neue Datei zu erstellen.
Dies öffnet ein Dialogfenster, in dem man zwischen verschiedenen Dateitypen wählen kann.
Nach Auswahl von „Quellcode“ wird man aufgefordert, einen Namen für die Datei einzugeben. In diesem Fall wird die Datei „MeineBibliothek“ genannt.
In der neu erstellten Quellcodedatei „MeineBibliothek“ wird eine Funktion definiert. Im Beispiel wird eine einfache Funktion namens „halloWelt“ erstellt, die „Hallo Welt!“ ausgibt. Dies zeigt, wie man wiederverwendbare Codeblöcke erstellt, die in verschiedenen Teilen des Projekts oder sogar in verschiedenen Projekten genutzt werden können.
Nach der Definition der Funktion wird sie im Hauptprogramm verwendet. Dies ermöglicht den Zugriff auf die „halloWelt“-Funktion.