2009-10-28 10 views

Antwort

17

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.

+1

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

+2

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

+2

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

12

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.

8

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; 
    } 
}