Quantcast
Channel: fischertechnik community forum
Viewing all articles
Browse latest Browse all 1379

Robo Pro / Computing / Software • eval ist (nicht unbedingt) evil

$
0
0
Hallo liebes Forum,

Bisher habe ich hier im Forum meistens Fragen gestellt.
Heute möchte ich mal eine Antwort bzw. einen Tip/Trick vorstellen:

Bei javascript - und auch in Python - gibt es die Funktion eval. Für javascript existiert der Spruch "eval ist evil". Von der Benutzung dieser Funktion wird völlig zu Recht aus Sicherheitsgründen abgeraten. Diese Sicherheitsbedenken gelten meines Erachtens im Zusammenhang mit der folgenden Anwendung aber nicht:

In meinen Modellen kommt es häufig vor, dass ein bestimmter Aktor (Motor, LED, ...) mehrfach vorhanden ist und mit fast identischen Funktionen angesteuert wird. Da in den Blöcken der Name des Aktors nicht in einer Variablen angegeben werden kann, muss diese Funktion für jeden Aktor einzeln erzeugt werden:
eval_0.png

Gezeigt wird der Code, der zwei LEDs zum Blinken bringt. Für jede weitere LED wird eine entsprechende Funktion benötigt. Diese können zwar leicht als Duplikate erzeugt werden. Falls Sie deutlich komplexer sind, blähen Sie das Programm aber sehr auf. Und änderungsfreundlich ist diese Lösung absolut nicht.

Dies kann durch Einsatz der eval-Funktion verhinder werden. Hierzu wird über die Zwischenablage der zugehörige Aufruf in einen Python-Aufruf eingetragen. Das wird dann wiederum als String in den eval-Aufruf eingebettet. Die laufende Nummer des Aktors wird dann durch den übergebenen Aufrufparameter ersetzt.

Im folgenden Programmfragment werden aus einer Schleife heraus mehrere LEDs zum Blinken gebracht.

eval_1.png
Natürlich müssen die entsprechenden Aktoren in der Controllerkonfiguration vorhanden sein.

Nähere Angaben zur eval-Anweisung in Python werden von Google reichlich nachgewiesen.

Viel Spass beim Ausprobieren.

Horst

Statistik: Verfasst von phg-berlin — 11 Nov 2024, 13:59



Viewing all articles
Browse latest Browse all 1379