Vorhaben:
In einem Script bei Erfüllen einer Bedingung mehrere Kommandos ausführen.
Klassische Lösung (symbolhaftes Beispiel):
if NewState then
begin
ExecuteCommand('TALKTIMER RESET');
ExecuteCommand('TALKTIMER START');
end
else
begin
blablubb
end;
Frage Verkettung:
if NewState then
ExecuteCommand('TALKTIMER RESET;TALKTIMER START');
else
blablubb
end;
Ist das eine zulässige Syntax bzw. darf ich in ExecuteCommand(); verkettete Kommandos einsetzen?
Falls ja, würde ich gerne ich gerne wie folgt vorgehen:
const
CmdSuperGut =
'TALKTIMER RESET;' +
'TALKTIMER START';
Das ist nur beispielhaft; tatsächlich sind noch mehr Kommandos in Folge angedacht.
Dadurch soll das Script dann wie folgt aussehen:
if NewState then
ExecuteCommand(CmdSuperGut);
else
blablubb
end;
-
Ist das überhaupt so möglich wie ich mir das gedacht habe?
-
Stimmt die Verbindung der Kommandos unter const so wie angedacht oder muss ich was an der Syntax ändern?
Verbundene Grüße
Ohne mich mit dem Problem näher auseinanderzusetzen: Mach es so, wie es funktioniert. Und das ist in jedem Falle sicher die Version mit den getrennten Zeilen. Vom Angesicht des Codes her spricht wahrscheinlich auch nichts gegen die Befehlskette, aber ich würde das ohne zwingenden Grund nie so machen, alleine schon wegen der Übersichtlichkeit des Codes.
Im Zweifel: Probiere es aus.
Vielleicht bist Du Dir nicht gewahr, wie so ein Compiler funktioniert: Du sparst dem Rechner nichts ein, wenn Du z. B. zwei Befehle in eine Zeile quetschst. Beim kompilieren (was für den Benutzer unmerklich* geschihet, wenn er ein Skript in mAirList lädt) wird radikal alles, was einen Code für menschliche Hirne lesbar macht, hinausgeworfen, und es bleiben nur krude Maschinenbefehle (einfachste Additionen, Speicherzuweisungen usw.) übrig, auch die schön ausgedachten Variablennamen sind perdu.
Insofern ist es dem Compiler auch recht egal, ob Du, wie im anderen Beispiel,
if Input = eiMic then
//do something
oder
if Input <> eiMic then
exit
schreibst. Es wird dasselbe passieren, mit gleichem Rechenaufwand.
Nicht egal ist es freilich, wenn der Code nicht nur aus drei Zeilen besteht, denn nach einem exit ist die gesamte Prodzedur beerdigt. Kommt nach der fraglichen Stelle weiterer Code, dann wäre eher ein break angebracht (macht nach der abgebrochenen Schleife weiter). Übersichtlicher ist aber in der Regel die verschachtelte if-Abfrage. Gegebenenfalls läßt sich durch die Verwendung von case usw. weitere Übersicht generieren. Näheres in der einschlägigen Literatur. (Bitte meine frühen – und auch zeitgenössischen – Programmbeispiele nicht als Maß für effizientes bzw. übersichtliches Programmieren hernehmen.)
* Es sei denn, es befinden sich Fehler im Code
1 Like
Das ist zweifellos die beste Idee.
Leider hat das mAirList auf meinem Laptop, das ich eben auch für Testzwecke nutze, gerade einen ganz gewaltigen Hau, den ich beim besten Willen weder erklären noch lösen kann.
Details gerne über einen anderen Kanal.
Ein Bugreport mit ausführlicher Fehlerbeschreibung liegt schon seit einiger Zeit bei Torben, aber ich werde mich in Geduld üben müssen. Und solange werde ich auf dem Testrechner leider nicht quer durch die Gegend probieren können.