2008-08-19 11 views

Antwort

16

Wenn Sie sie verwenden müssen, verwenden Sie Großbuchstaben, dies lenkt die Aufmerksamkeit auf sie und hebt sie von fälschlicherweise als "Klasse" Namen interpretiert. Die Aufmerksamkeit auf sich zu ziehen, hat den zusätzlichen Vorteil, dass man das Auge eines anderen auffängt und seinen Code umgestaltet und entfernt. ;)

15

Die Konvention besteht darin, Etiketten ganz zu vermeiden.

Es gibt sehr, sehr wenige stichhaltige Gründe, ein Label zum Ausbrechen aus einer Schleife zu verwenden. Das Ausbrechen ist in Ordnung, aber Sie können die Notwendigkeit, überhaupt zu brechen, indem Sie Ihr Design ein wenig ändern, entfernen. In dem Beispiel, das Sie angegeben haben, würden Sie die Abschnitte "Lots of code" extrahieren und in einzelne Methoden mit aussagekräftigen Namen einfügen.

for (;/*stuff*/;) 
{ 
    lotsOfCode(); 

    if (!isEnough()) 
    { 
     moreCode(); 
    } 
} 

Edit: den eigentlichen Code in Frage gesehen zu haben (over here), ich denke, die Verwendung von Etiketten ist wahrscheinlich der beste Weg, den Code lesbar zu machen. In den meisten Fällen ist die Verwendung von Labels der falsche Ansatz, in diesem Fall denke ich, dass es in Ordnung ist.

0

Die Konvektion/Best Practice wäre immer noch nicht, sie überhaupt zu verwenden und den Code zu refactorisieren, so dass die Verwendung von extract als Methode besser lesbar ist.

0

Sie sind eine Art der goto von Java - nicht sicher, ob C# sie hat. Ich habe sie nie in der Praxis verwendet, ich kann mir keinen Fall vorstellen, in dem das Vermeiden von ihnen nicht zu viel besser lesbarem Code führen würde.

Aber wenn Sie- ich denke, alle Kappen ist in Ordnung. Die meisten Leute werden keine markierten Pausen verwenden. Wenn sie den Code sehen, springen die Caps auf sie und zwingen sie zu erkennen, was vor sich geht.

1

Ich weiß, ich sollte keine Etiketten verwenden.

Aber nehmen Sie einfach an, ich habe etwas Code, der eine Menge an Lesbarkeit von beschrifteten Pausen gewinnen könnte, wie ich sie formatiere.

Mo, Ihre Prämisse ist falsch. Die Frage sollte nicht sein "wie formatiere ich sie?"

Ihre Frage sollte sein "Ich habe Code, der eine große Menge an Logik in Schleifen hat - wie mache ich es lesbarer?"

Die Antwort auf diese Frage ist, den Code in einzelne, gut benannte Funktionen zu verschieben. Dann müssen Sie die Pausen überhaupt nicht kennzeichnen.

1

Die Konvention ich am meisten gesehen habe, ist einfach Kamel Fall, wie ein Name Methode ...

myLabel: 

aber ich habe auch Etiketten mit einem Unterstrich

_myLabel: 

oder mit dem Präfix gesehen Labor...

labSomething: 

Sie können sich wahrscheinlich jedoch von den anderen Antworten spüren, dass Sie hart gedrückt werden, werden einen Codierungsstandard zu finden, die etwas anderes als sagt: ‚Verwenden Sie keine Etiketten‘. Die Antwort ist dann, denke ich, dass du den Stil verwenden sollst, der für dich Sinn macht, solange es konsistent ist.

33

Ich verstehe nicht, woher diese Regel "keine Labels verwenden" kommt. Wenn eine nicht-triviale Schleifenlogik ausgeführt wird, ist der Test zum Brechen oder Fortfahren nicht immer sauber am Ende des umgebenden Blocks.

outer_loop: 
for (...) { 
    // some code 
    for (...) { 
    // some code 
    if (...) 
     continue outer_loop; 
    // more code 
    } 
    // more code 
} 

Ja, wie diese Fälle die ganze Zeit passieren. Was schlagen Leute vor, die ich stattdessen verwende? Eine boolesche Bedingung wie diese?

for (...) { 
    // some code 
    boolean continueOuterLoop = false; 
    for (...) { 
    // some code 
    if (...) { 
     continueOuterLoop = true; 
     break; 
    } 
    // more code 
    } 
    if (continueOuterLoop) 
    continue; 
    // more code 
} 

Yuck! Refactoring es als ein Verfahren lindert nicht, dass entweder:

boolean innerLoop (...) { 
    for (...) { 
    // some code 
    if (...) { 
     return true; 
    } 
    // more code 
    } 
    return false; 
} 

for (...) { 
    // some code 
    if (innerLoop(...)) 
    continue; 
    // more code 
} 

Sicher ist es ein wenig schöner, aber es ist vorbei noch um eine überflüssige boolean. Und wenn die innere Schleife lokale Variablen modifiziert hat, ist das Refactoring in eine Methode nicht immer die richtige Lösung.

Warum also sind Sie alle gegen Etiketten? Geben Sie mir einige gute Gründe und praktische Alternativen für den obigen Fall.

+10

* Update vier Jahre später: * Es gibt einen zunehmenden Trend zu funktionalen Sprachen wie Scala und Clojure, in denen der Rat, keine Labels zu verwenden, aus gutem Grund gültig ist. Aber für normales Java steht meine obige Antwort immer noch. –

+0

Und Javascrpt sowie jede Event-basierte Sprache. Für Beans könnte es also nicht so nützlich sein, es sei denn, dies wäre Teil einer sehr (wahrscheinlich zu) langen Ereignisbehandlung. – Cheruvim

+0

Neugierig, dass die Antwort mit der höchsten Antwort die ursprüngliche Frage überhaupt nicht beantwortet. ("* Ich habe mich gefragt, was die übliche Konvention für die Etiketten war. Alle Kappen? Erste Kappe? *) – Jonik

1

WRT sadie's code example:

Du hast

outerloop: 
for (...) { 
    // some code 
    for (...) { 
    // some code 
    if (...) 
     continue outerloop; 
    // more code 
    } 
    // more code 
} 

Als ein Beispiel. Du machst einen guten Punkt. Meine beste Vermutung wäre:

public void lookMumNoLabels() { 
    for (...) { 
    // some code 
    doMoreInnerCodeLogic(...); 
    } 
} 

private void doMoreInnerCodeLogic(...) { 
    for (...) { 
     // some code 
     if (...) return; 
    } 
} 

Aber es würde Beispiele, wo diese Art von Refactoring nicht richtig mit nicht sitzen, was auch immer Logik du tust.

1

Da Bezeichnungen so selten nützlich sind, scheint es, dass es keine klare Konvention gibt. Die Java-Sprachspezifikation hat ein Beispiel mit Labels und sie sind in non_cap.

Aber da sie so selten sind, ist es meiner Meinung nach am besten, zweimal darüber nachzudenken, ob sie wirklich das richtige Werkzeug sind.

Und wenn sie das richtige Werkzeug sind, machen Sie sie alle Caps, damit andere Entwickler (oder Sie selbst später) sie als etwas Ungewöhnliches sofort erkennen. (wie Craig bereits darauf hinwies)

5

Suns Java-Code-Stil scheint die Benennung von Labels auf die gleiche Weise wie Variablen zu bevorzugen, was bedeutet, camel case mit dem ersten Buchstaben in Kleinbuchstaben.