Schönen guten Tag, allerseits.
Da ich noch Anfänger bin, habe ich eine grundsätzliche Frage zur Programmierung:
Ich erinnere mich noch, daß man den GOTO-Befehl aus vielen Programmiersprache gestrichen hat, weil dessen Benutzung als äußerst unsauber galt.
Nun sehe ich aber immer wieder in diversen Skrpts, dass dort "Return" benutzt wird, um eine Funktion/Schleife vorzeitig zu verlassen. Ist das nicht auch einfach nur ein "getarnter" GOTO-Befehl?
Konkret stellte sich für mich das Problem, dass ich eine Funktion in einem Programm habe, die von unterschiedlichen Stellen aufgerufen wird und je nach Aufruf "unterschiedlich weit" durchlaufen werden soll.
Noch konkreter: Wenn man das Programm per Doppelklick auf die exe startet, sollen per "FileInstall" 10 Dateien entpackt werden. Wird das programm aber mit einem Argument gestartet (Rechtsklick aus dem Kontextmenü), sollen nur die ersten 3 Dateien aus der Liste entpackt werden.
Hier mal ein allgemeines Beispiel, um zu zeigen, was ich meine:
Spoiler anzeigen
;==> Benutzung von "Return"
For $i = 0 to 3
Local $satz = ""
_Return($i)
MsgBox(0, "_Return(" & $i & ")", $satz)
Next
_Return(1234) ;==> Bei Aufruf mit beliebigem Argument läuft die Schleife bis zum Ende durch
MsgBox(0, "_Return(1234)", $satz)
;==> Das Gleiche mit "Switch"
For $i = 0 to 3
Local $satz = ""
_Switch($i)
MsgBox(0, "_Switch(" & $i & ")", $satz)
Next
_Switch(1234) ;==> beliebiges Argument
MsgBox(0, "_Switch(1234)", $satz)
Exit
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Return($eject)
$satz = "Dies ist "
If $eject = 0 Then Return
$satz &= "ein unvollständiger "
If $eject = 1 Then Return
$satz &= "Satz, der "
If $eject = 2 Then Return
$satz &= "nun doch "
If $eject = 3 Then Return
$satz &= "vollständig ist."
EndFunc
Func _Switch($eject)
Switch $eject
Case 0
$satz = "Dies ist"
Case 1
$satz = "Dies ist ein unvollständiger"
Case 2
$satz = "Dies ist ein unvollständiger Satz, der"
Case 3
$satz = "Dies ist ein unvollständiger Satz, der nun doch"
Case Else
$satz = "Dies ist ein unvollständiger Satz, der nun doch vollständig ist."
EndSwitch
EndFunc
Was ist "sauberer"? Return oder Switch/Case?
P.s.: Mir ist klar, dass man diese Spezielle Aufgabe auch eleganter lösen kann, aber das soll ja nur ein Beispiel sein...