Ich finde, dass die Verwendung von Etiketten in Perl-Subroutinen, um von mehreren Schleifen zu brechen, oder um einige Teile mit aktualisierten Variablen zu wiederholen, sehr hilfreich. Wie sieht dieser Codierungsstil in der Community aus? Sind Etiketten in Subroutinen verpönt?Wird die Verwendung von Labels in Perl-Subroutinen als schlechte Methode betrachtet?
Antwort
Nein. Sie dienen genau dem Zweck, den Sie beschreiben und ich betrachte sie als ein nettes Merkmal der Sprache, die zu wenig verwendet wird.
Auf der anderen Seite, wenn ich über die Verwendung eines Etiketts nachdenken, frage ich mich auch, ob mein Code ein wenig Refactoring benötigt.
Verwenden von Etiketten mit next
, last
und redo
ist in Ordnung, aber Sie sollten eine Pause einlegen, um zu prüfen, ob die Code-Struktur die beste ist. Meiner Erfahrung nach müssen Sie diese Operatoren nur selten für andere als die umschließende Schleife verwenden (was bedeutet, dass Sie kein Label verwenden müssen).
Es wird dringend davon abgeraten, goto LABEL
zu verwenden.
In der Regel gibt es keinen Grund, goto LABEL
zu verwenden.
Zum Beispiel:
my $i = 10;
Label:
# ...
goto Label if --$i;
ist besser geschrieben als:
my $i = 10;
{
# ...
redo if --$i;
}
Der einzige Grund, warum ich denken kann, ein Etikett zu verwenden, ist aus mehreren Schleifen zu brechen, oder um eine äußere Schleife fortzusetzen.
my $i = 10;
OUTER: while(1){
# ...
while(1){
# ...
last OUTER unless --$i;
}
}
my $i = 10;
OUTER: {
# ...
{
# ...
redo OUTER if --$i;
}
}
In den meisten Fällen, denke ich, der Code klarer mit der Verwendung von Etiketten ist. Das Umschreiben von Code, so dass er sie nicht mehr verwendet, führt normalerweise zu vielen zusätzlichen Codezeilen. – Geo
Manchmal tut es das, manchmal nicht. Ich gehe immer für den Code, der leichter zu lesen und zu verstehen ist. Manchmal ist das der Code, der Labels verwendet. – innaM
Perl Best Practices spricht sich für Labels aus. Ich stimme nicht mit allen von PBP überein, aber ich denke, das ist einer seiner guten Ratschläge. Sie dienen als Dokumentation, wenn nichts anderes. – hobbs