Einzelaussage ob Klammer oder nein? [geschlossen]


59

Was ist besser / allgemeiner akzeptiert?

Diese:

if(condition)
{
  statement;
}

Oder:

if(condition)
  statement;

Ich bevorzuge eher die erste, weil ich denke, dass es einfacher ist zu erkennen, was tatsächlich in den if-Block gehört, andere davon abhält, die Klammern später einzufügen (oder einen Fehler zu erzeugen, indem sie vergessen), und alle Ihre if-Anweisungen enthält Uniform statt mit Hosenträgern und ohne. Das zweite ist jedoch syntaktisch korrekt und definitiv kompakter. Ich bin gespannt, was von anderen generell bevorzugt wird.


2
Aber Sie haben Ihre Eröffnungsspange in der falschen Position. Soviel ist sicher.
Christian Mann

In vielen Sprachen ist ein Block eine Anweisung, daher ist es syntaktisch immer eine (Ausdrucks-) Anweisung
Ingo

2
Da Sie keine Sprache angegeben haben ... Was ist mit statement if condition;?
Dave Sherohman

@ Christian - gut. Das wäre eine andere Frage, nein?
Zannjaminderson

@Ingo - guter Punkt.
Zannjaminderson

Antworten:


131

Das erste ist besser, weil das zweite fehleranfällig ist. Nehmen wir zum Beispiel an, Sie kommentieren Code vorübergehend aus, um etwas zu debuggen:

if(condition) 
//      statement;
otherStatement;

Oder fügen Sie schnell Code hinzu:

if(condition) 
    statement;
    otherStatement;

Das ist offensichtlich schlecht. Andererseits fühlt sich der erste manchmal zu wortreich an. Deshalb ziehe ich es vor, alles auf eine Zeile zu setzen, wenn es kurz und einfach genug ist:

if(condition) statement;

Dadurch wird das syntaktische Rauschen reduziert, während das Konstrukt so aussieht, wie es tatsächlich funktioniert, wodurch es weniger fehleranfällig wird. Sofern diese Syntax nur für sehr einfache, kurze Bedingungen und Anweisungen verwendet wird, finde ich sie perfekt lesbar.


35
Guter Punkt, um alles auf eine Linie zu setzen.
Neil Aitken

7
@artjomka: Wenn die Anweisung lang ist und in einer eigenen Zeile stehen muss, verwende ich zur besseren Lesbarkeit geschweifte Klammern. Der Punkt ist, dass Sie das kürzeste, am wenigsten syntaktisch verrauschte Konstrukt wollen, das für einen Menschen, der es schnell liest, eindeutig ist, anstatt es zu hinterfragen.
DSIMCHA

15
Ich bevorzuge die mit Zahnspange aus den bereits genannten Gründen. Ich mag den Einzeiler nicht, weil es nicht sofort offensichtlich ist, was passiert, wenn ich im Debugger über die Linie gehe. Ich muss den separaten Schritt unternehmen, um zu sehen, welche Bedingung bewertet wird.
Jim A

10
@TMN Whitespace ist kostenlos, Monitore sind groß und Ihr Gehirn lernt, die Form zu erkennen, mit deren Hilfe Sie den Code analysieren können.
Murph

5
@Murph: Whitespace ist kostenlos? Das muss ich verpasst haben. Auf meinem Bildschirm nimmt es sehr viel Platz ein. Viel mehr als 50%. Was in meinem Buch wie eine große Verschwendung erscheint. Persönlich möchte ich den Inhalt pro Quadratzentimeter Code maximieren.
Konrad Rudolph

44

Ich benutze immer Klammern, um sicher zu gehen.

Es ist in Ordnung, wenn Sie es schreiben, aber Sie wissen, dass in Zukunft jemand mitkommt und eine andere Aussage einfügt, ohne sie in Klammern zu setzen.


20
Haben die Leute das wirklich gesehen? Ich glaube nicht, dass ich das in 10 Jahren Programmierarbeit jemals gesehen habe. Vielleicht war ich einfach zu geschützt. :)
David

9
Ich würde gerne nein sagen, aber leider habe ich es gesehen.
Neil Aitken

13
Sie verwenden immer Klammern, damit Sie nie vergessen, Klammern zu verwenden - so einfach ist das.
Murph

12
+1 zu @Murph. Aus demselben Grund benutze ich meine Blinker, wenn niemand in der Nähe ist - und auf Parkplätzen!
Dan Ray

7
Dies ist eine bewährte Methode, um Fehler beim Zusammenführen von Zweig zu Zweig oder zwischen Zweigen zu vermeiden.
JBRWilkinson

27

Ich bevorzuge die Version ohne Klammern wo möglich.

Die folgende Erklärung ist langwierig. Bitte bei mir tragen. Ich gebe einen zwingenden Grund für mich, diesen Stil zu bevorzugen. Ich werde auch erklären, warum ich denke, dass das übliche Gegenargument nicht zutrifft.

(Fast-) Leerzeilen sind Verschwendung

Der Grund dafür ist, dass die schließende Klammer eine zusätzliche Codezeile erfordert - und je nach Stil auch die öffnende Klammer. 1

Ist das eine große Sache? Oberflächlich gesehen nein. Schließlich setzen die meisten Leute auch Leerzeilen in ihren Code, um logisch leicht unabhängige Blöcke zu trennen, was die Lesbarkeit erheblich verbessert.

Ich hasse es jedoch, vertikalen Raum zu verschwenden. Moderne Monitore haben tatsächlich viel horizontalen Raum. Der vertikale Raum ist jedoch immer noch sehr, sehr begrenzt (es sei denn, Sie verwenden einen aufrechten Monitor, was nicht ungewöhnlich ist). Dieser begrenzte vertikale Raum ist ein Problem: Es ist allgemein anerkannt, dass einzelne Methoden so kurz wie möglich sein sollten und dass die entsprechenden Klammern (oder andere Blockbegrenzer) nicht höher als eine Bildschirmhöhe sein sollten, damit Sie den gesamten Block ohne Klammern sehen können Scrollen.

Dies ist ein grundlegendes Problem: Sobald Sie nicht mehr den gesamten Block auf Ihrem Bildschirm sehen können, wird es schwierig, ihn zu erfassen.

Infolgedessen verabscheue ich redundante Leerzeilen. Während einzelne Leerzeilen für die Abgrenzung unabhängiger Blöcke von entscheidender Bedeutung sind (sehen Sie sich nur das Erscheinungsbild dieses Textes an), sind aufeinanderfolgende Leerzeilen in meinem Buch ein sehr schlechter Stil (und meiner Erfahrung nach sind sie in der Regel ein Zeichen für unerfahrene Programmierer).

Ebenso sollten Leitungen, die einfach eine Klammer halten und die eingespart werden könnten, sein. Ein Block mit einer Anweisung, der durch geschweifte Klammern begrenzt ist, verschwendet ein bis zwei Zeilen. Bei nur 50 Zeilen pro Bildschirmhöhe fällt dies auf.

Klammern wegzulassen schadet vielleicht nicht

Es gibt nur ein Argument gegen das Weglassen von geschweiften Klammern: Jemand wird später eine weitere Anweisung zum betreffenden Block hinzufügen und das Hinzufügen der geschweiften Klammern vergessen, wodurch die Semantik des Codes versehentlich geändert wird.

Dies wäre in der Tat eine große Sache.

Aber meiner Erfahrung nach ist es nicht. Ich bin ein schlampiger Programmierer. und doch kann ich in meinem Jahrzehnt der Programmiererfahrung ehrlich sagen, dass ich nicht einmal vergessen habe, die geschweiften Klammern hinzuzufügen, wenn ich einem Singleton-Block eine zusätzliche Anweisung hinzufüge.

Ich finde es sogar unplausibel, dass dies ein häufiger Fehler sein sollte: Blöcke sind ein grundlegender Bestandteil der Programmierung. Block Level Resolution und Scoping ist ein automatischer, tief verwurzelter mentaler Prozess für Programmierer. Das Gehirn tut es einfach (ansonsten wäre es viel schwieriger, über das Programmieren nachzudenken). Es ist keine zusätzliche mentale Anstrengung erforderlich, um sich daran zu erinnern, die geschweiften Klammern gesetzt zu haben: Der Programmierer erinnert sich auch, die neu hinzugefügte Anweisung schließlich korrekt eingerückt zu haben ; der programmierer hat also schon mental verarbeitet, dass es sich um einen block handelt.

Jetzt sage ich nicht , dass das Weglassen von Klammern keine Fehler verursacht. Was ich sage ist, dass wir auf die eine oder andere Weise keine Beweise haben. Wir wissen einfach nicht, ob es Schaden anrichtet.

Solange mir also niemand aussagekräftige Daten zeigen kann, die aus wissenschaftlichen Experimenten stammen und zeigen, dass dies tatsächlich ein Problem in der Praxis ist, bleibt diese Theorie eine „ einfache Geschichte “: eine sehr überzeugende Hypothese, die noch nie auf den Prüfstand gestellt wurde darf nicht als Argument verwendet werden.


1 Dieses Problem wird manchmal gelöst, indem Sie alles - einschließlich der geschweiften Klammern - in dieselbe Zeile setzen:

if (condition)
{ do_something(); }

Ich glaube jedoch, es ist sicher zu sagen, dass die meisten Menschen dies verachten. Darüber hinaus hätte es die gleichen Probleme wie die Variante ohne Zahnspange, so dass es das Schlimmste von beiden Welten ist.


6
Das Weglassen von geschweiften Klammern beeinträchtigt die Lesbarkeit und kann leicht zu Problemen führen, wenn der Code geändert wird.
Josh K

15
@Josh: Die erste Behauptung ist lächerlich, wie Sprachen wie Python zeigen. Dem zweiten wurde in meiner Antwort widersprochen. Haben Sie Beweise dafür? Andernfalls ist Ihr Kommentar ein Hinweis darauf, dass Sie meinen Text nicht gelesen haben. Bitte tun Sie dies, bevor Sie es kritisieren.
Konrad Rudolph

8
+1 für deine Gedanken, aber ich denke, deine Position ist selbstzerstörerisch. Sie sagen: "Zeigen Sie mir harte Daten, die aus wissenschaftlichen Experimenten stammen und zeigen, dass dies tatsächlich ein Problem in der Praxis ist." Sie sagen, "in meiner Erfahrung ... in meinem Jahrzehnt der Erfahrung ... finde ich es unplausibel ..." und so weiter. Können Sie aussagekräftige Daten aus wissenschaftlichen Experimenten vorlegen, die Ihre Behauptung unterstützen, dass das Weglassen von Zahnspangen keinen Schaden anrichtet? Persönliche Erfahrung ist in Ordnung, wenn Sie eine Meinung unterstützen, aber fragen Sie nicht nach mehr "Beweisen", als Sie bereit sind zu geben.
Bedwyr

3
@bedwyr: Es gibt jedoch einen qualitativen Unterschied. Zunächst mache ich deutlich, dass ich tatsächlich von Daten überzeugt sein werde, und ebenso deutlich, dass meine Hypothese lediglich eine Hypothese ist, die nicht von Daten gestützt wird. Zweitens habe ich ein (zumindest für mich) plausibles Argument für meine Überzeugung dargelegt, dass die Behauptung falsch ist und warum sie bestätigt werden muss. Was mich zum dritten führt: Die Opposition ist verpflichtet, ihren Anspruch zu beweisen, nicht mich, ihn zu widerlegen. Und zusätzlich zu dem Plausibilitätsproblem habe ich ein nicht verwandtes sachliches Argument gezeigt, das meinen Codierungsstil unterstützt.
Konrad Rudolph

4
@Konrad - Python zeigt nichts anderes an, da der Einzug signifikant ist und daher die geschweiften Klammern implizit sind. Gute, kluge Programmierer, die hier sind, werden wahrscheinlich nicht oft den Fehler machen, wenn überhaupt (in vielen Jahren habe ich wahrscheinlich nur ein paar Mal Probleme damit gesehen), aber es gibt viele, die weniger gut sind Programmierer da draußen, die dumme Dinge tun, was einer der Gründe ist, warum überhaupt Codierungsstandards benötigt werden. (Und weil Fristen und Stress das Beste von uns weniger gut machen können.)
Murph

19

Ich gehe mit dem zweiten. Es ist prägnanter und weniger ausführlich.

Ich versuche, nicht auf den kleinsten gemeinsamen Nenner zu schreiben, daher erwarte ich, dass andere Entwickler wissen, wie man eine der häufigsten Kontrollflussstrukturen in der heutigen Programmierung schreibt.


11
absolut! Wenn der Code schwer zu schreiben ist, sollte er auch schwer zu warten sein! ;-)
Steven A. Lowe

3
@Steven Wenn du Klammern vergisst, denke ich, dass es hier andere Probleme gibt.
TheLQ

mehr Succint == weniger wortreich
UncleZeiv

5
@SnOrfus: etwas sarkastisch, da die zusätzlichen 2 Zeichen nur geringfügigen Aufwand bedeuten und einen sehr häufigen Wartungsfehler verhindern. Ihre Laufleistung kann variieren ;-)
Steven A. Lowe

1
Für mich macht der Einzug deutlich, was los ist. Das erste Formular verbrennt zusätzlichen Bildschirmplatz und ist daher für mich ein Negativ.
Loren Pechtel

16

Ich würde folgendes verwenden (der Konsens hier):

if (condition) {
    any_number_of_statements;
}

Auch möglich:

if(condition) single_compact_statement;

Nicht so gut, besonders in C / C ++ ähnlichen Sprachen:

if(condition) 
    single_compact_statement;

(Keine Wahl hier in Python ;-)


In Perl würden Sie Folgendes verwenden:

$C = $A**3 if $A != $B;

oder

$C = $A**3 unless $A == $B;

(Dies ist kein Pseudocode ;-)


1
Genau meine Gedanken. Wenn die einzelne Anweisung in einer einzelnen Zeile nach der ifKlausel gut aussieht , verwende ich keine geschweiften Klammern. Für jede andere ifAnweisung (oder jede Anweisung, die mehrere Zeilen verwendet) verwende ich immer geschweifte Klammern. Insbesondere wenn es eine elseKlausel gibt, hat jeder Fall immer geschweifte Klammern.
Eswald

9
Ich habe noch nie jemanden gesehen, der Perl mit Pseudocode verwechselt hat. Zufällige Zeichen ja, Pseudocode - nein.
Joe D

3
Ich frage mich, ob jemand einen Perl-Programmgenerator erstellt hat, indem er / dev / random an einen Perl-Interpreter angeschlossen hat ...
Christian Mann

Ich mag Rubys Ansatz hier. Es bietet die Perl - Stil einzeilig <statement> if <condition>oder ein mehrzeiliges Block Stil if <condition>/ <do something>/ end(Rubin vermeidet Klammern, so dass hier die öffnende Klammer wird angedeutet durch ifund das Ende Klammer wird durch eine wörtliche ersetzt end). Es bietet nicht einmal die seltsame mehrzeilige, sondern nur einzeilige if-Anweisung.
Ben Lee

Der Einzeiler funktioniert mit den meisten Debuggern nicht (es ist nicht möglich, eine Unterbrechung auszulösen, wenn der Inhalt der 'if'-Klausel ausgeführt werden soll).
Peter Mortensen

11

Ich benutze die Methode der Zahnspange - aus allen oben genannten Gründen plus einer weiteren.

Code wird zusammengeführt. Es ist bekannt, dass es bei Projekten passiert, bei denen ich an einer einzigen Anweisung gearbeitet habe, wenn durch automatische Zusammenführungen Fehler aufgetreten sind. Das Beängstigende ist, dass die Einrückung richtig aussieht , obwohl der Code falsch ist, so dass diese Art von Fehler schwer zu erkennen ist.

Also gehe ich mit Zahnspangen - auf eigene Faust. Es ist einfacher, die Ebenen auf diese Weise zu erkennen. Ja, es verschwendet vertikale Bildschirme und das ist ein echter Nachteil. Alles in allem denke ich, dass es sich lohnt.


10

Keine geschweiften Klammern. Wenn ein anderer Programmierer meinem Code eine zweite Anweisung hinzufügt, ist das nicht mehr meine Schuld, als wenn ich jemanden mein Auto fahren lasse und er über eine Klippe fährt.


3
Genau! Es ist nicht unsere Schuld, dass er / sie die Syntax nicht kennt.
kirk.burleson

3
Schlechtes Beispiel. Ein gutes ist ein Auto mit verlegten Pedalen - Gas statt Bremse. Es ist dein Auto, also kümmert dich niemand anderes. Es ist ein Problem, dass sie nicht über Ihre einzigartige Positionierung der Pedale Bescheid wissen. Sind Sie in diesem Fall ein guter Autoingenieur?
yegor256

Es wäre deine Schuld, wenn du ihnen dein Auto gibst und weißt, dass sie betrunken sein könnten. Ebenso sollten wir versuchen, so wenig wie möglich von zukünftigen Entwicklern auszugehen, um die Wartung zu vereinfachen.
Aram Kocharyan

8

Wir haben dieses Argument mehr als einmal hier gehabt, und der allgemeine Konsens ist, immer geschweifte Klammern zu verwenden. Die Hauptgründe sind über Lesbarkeit / Wartbarkeit.

Wenn Sie dem ifBlock Code hinzufügen müssen , müssen Sie sich keine geschweiften Klammern merken / suchen. Wenn zukünftige Programmierer den Code lesen, sind die Klammern immer eindeutig.

Auf der positiven Seite, ReSharper automatisch die Zahnspange für faule Programmierer in Visual Studio hinzufügen, und ich nehme an, es gibt Addons für andere IDEs , die auch tun wird.


3
Ich kaufe den Lesbarkeitsanspruch grundsätzlich nicht. Python ist eine der am besten lesbaren Sprachen und benötigt keine Trennzeichen. Diese Behauptung ist einfach nicht wahr. Ich kaufe den Wartbarkeitsanspruch auch nicht, weil er bisher nicht bewiesen und immer wieder aufgearbeitet wurde. In diesem Fall bin ich jedoch sehr an empirischen Belegen interessiert. Dies ist etwas, das eine Studie sehr leicht herausfinden und ein für alle Mal erledigen könnte.
Konrad Rudolph

Da Python Einrückungen anstelle von Trennzeichen verwendet, ist dies implizit kein gültiger Vergleich.
Murph

@Konrad - empirische Beweise: Als ich ein neuer Programmierer war, fügte ich einem nicht geschweiften if-Block Code hinzu, ohne zu bemerken, dass der vorherige Programmierer sich nicht um geschweifte Klammern gekümmert hatte. Ich habe persönlich gesehen, wie andere dies mit meinen eigenen Augen taten. Zugegeben, ich habe nur einmal gesehen, dass jemand Hilfe benötigt, um das Problem zu finden, nachdem er seinen Code ausgeführt hat, aber das hatte mehr mit schlechten Testfähigkeiten zu tun.
Shimonyk

@shimonyk: Deine Beobachtungen stützen also grundsätzlich meine Behauptung, dass dieses Problem nicht von Belang ist? Persönliche Beobachtungen sind übrigens Anekdoten, sie gelten nicht als empirischer Beweis.
Konrad Rudolph

@Konrad sehr gut, bitte zitieren Sie auch Ihre Quellen. Ich nehme an, Sie haben eine Peer-Review-Doppelblind-Studie, auf die Sie sich beziehen? Wenn nicht, dann ist es bestenfalls scheinheilig, wenn Sie Ihre eigenen Anekdoten missachten, um anderen zu beweisen, dass sie Unrecht tun, während Sie ein anderes Plakat fordern. Wie jemand weiter unten zu diesem Thema schrieb: "Es liegt an der Opposition, ihren Anspruch zu beweisen, und nicht an mir, ihn zu widerlegen."
Shimonyk

7

Ich verwende fast ausnahmslos die erste Syntax. Weil es nicht falsch interpretiert werden kann .

"Lass mich nicht nachdenken" gilt nicht nur für Benutzeroberflächen ;-)


4
Früher habe ich das getan, aber ich war von dem Argument überzeugt, dass Programmierer die Sprache kennen müssen und sie zum Denken gebracht werden sollten.
kirk.burleson

2
Ich halte es für eine Höflichkeit ... für mein zukünftiges Ich.
Steven A. Lowe

5

Ich persönlich bevorzuge die zweite. Der erste sieht hässlich und umständlich aus und verschwendet horizontalen Raum. Die Hauptprobleme mit dem zweiten sind Makros und Leute, die Ihren Code zu einem späteren Zeitpunkt modifizieren.

Dazu sage ich "keine Makros verwenden". Ich sage auch "Deinen verdammten Code richtig einrücken". In Anbetracht dessen, wie jeder Texteditor / jede IDE, die für die Programmierung verwendet wird, die Einrückung automatisch ausführt, sollte dies nicht so schwierig sein. Beim Schreiben von Code in Emacs würde ich den automatischen Einzug verwenden, um festzustellen, ob in einer vorherigen Zeile ein Fehler aufgetreten ist. Immer wenn Emacs anfängt, Einrückungen zu verfälschen, weiß ich normalerweise, dass ich etwas falsch gemacht habe.

In der Praxis befolge ich letztendlich die Kodierungskonvention, die vor mir festgelegt wurde. Aber diese nerven mich (und machen mich viel glücklicher, wenn ich in Python programmiere und das gesamte Bracket-Desaster weg ist):

if (condition) {
    statement;
} // stupid extra brace looks ugly

Dann

if (condition) // the brackets have now just become noise
{ statement; } // also can't see the indentation, harder to read

Obwohl ehrlich gesagt, stören mich zwei Aussagen in einer if-Aussage weit mehr als eine einzige Aussage. Meist sind da dann eckige Klammern erforderlich und es sieht trotzdem lustig aus mit nur zwei Anweisungen in der if-Anweisung.


Wenn Sie Makros schreiben möchten, sollten Sie diese schreiben, um sicherzustellen, dass sie in jeden Teil des Codes eingefügt werden können, ohne dass sie dabei beschädigt werden.
Covar

4

Ich benutze die zweizeilige Version ohne geschweifte Klammern (2. Form), aber nicht um Platz zu sparen.

Ich benutze dieses Formular, weil es lesbarer, optisch ansprechender und einfacher zu tippen ist. Ich benutze dieses Formular nur, wenn diese Bedingungen erfüllt sind. dh die ifBedingung muss gut in eine einzelne Zeile passen, und die entsprechende Anweisung muss gut in die folgende Zeile passen. Wenn dies nicht der Fall ist, verwende ich geschweifte Klammern, um die Lesbarkeit zu verbessern.

Wenn ich dieses Formular verwende, stelle ich sicher, dass vor und nach der ifAnweisung (oder über dem Kommentar, falls vorhanden) eine leere Zeile (oder eine Zeile, die nur eine geschweifte Klammer enthält ) steht. Dies ist zwar keine Regel, die ich bewusst befolge, aber ich merke es jetzt, nachdem ich diese Frage gelesen habe.

Die Schonung des Bildschirmplatzes hat für mich keine Priorität. Wenn ich mehr Platz brauchte, würde ich einen größeren Monitor verwenden. Mein Bildschirm ist bereits groß genug, um alles zu lesen, auf das ich meine Aufmerksamkeit richten kann. Es ist unwahrscheinlich, dass ich mich auf so viele Codezeilen gleichzeitig konzentrieren muss, dass sie meinen gesamten Bildschirm einnehmen. Wenn mit einem Codeabschnitt so viel geschachtelt wird, dass ich ihn nicht verstehen kann, ohne ihn auf einmal erneut anzuzeigen, müsste ich überlegen, ob die Logik besser durch Refactoring dargestellt werden könnte.

Im Folgenden sind einige Beispiele aufgeführt, die veranschaulichen, wie ich diese Form der ifAnweisung verwende.

    string GuardConditions(Plan planForWorldDomination)
    {
        if (planForWorldDomination == null)
            throw new ArgumentNullException("planForWorldDomination");

        if (!planForWorldDomination.IsComplete())
            return "Doh!";

        planForWorldDomination.Execute();
    }

    void ProcessingLogic()
    {
        OneBlankLineAbove();

        if (simpleCondition)
            simpleStatement();

        OneBlankLineBelow();
        OneBlankLineAbove();

        // optional comment on the line above an if statement
        if (simpleCondition)
            simpleStatement();

        OneBlankLineBelow();
    }

    void Assignment(string drive)
    {
        OneBlankLineAbove();

        string prompt;
        if (simpleCondition)
            prompt = "simple assignment";
        else
            prompt = null;

        OneBlankLineBelow();
    }

    string Return()
    {
        OneBlankLineAbove();

        if (simpleCondition)
            return "simple return";
        else
            return null;

        OneBlankLineBelow();
    }

3

Hosenträger. Immer. Ich bin eine Art Fan von ihnen, weil es dem Code eine gewisse Konsistenz verleiht. Und wie @dsimcha schrieb - weniger Fehler beim Hinzufügen zusätzlicher Codezeilen.

"Hässlichkeit" von geschweiften Klammern um eine einzelne Codezeile ist weniger schädlich als zusätzliche Arbeit, die in solchen Fällen mit dem Debuggen und / oder Hinzufügen von Code wahrscheinlich ist.


1
Ich habe noch nie jemanden gesehen, der den Fehler gemacht hat, von dem Sie sprechen.
kirk.burleson

1
Ich habe es gestern mit einem anderen Code gemacht. :-) Ich frage mich nur, wie der Upstream aussehen wird, neben anderen Ergänzungen des Codes, die Klammern an all seinen Ifs anfügen, weil er wirklich von einer anderen Seite zu sein scheint als ich. :-) (Beruhige dich, ich scherze, bearbeitet genau das, was ich musste ...)
Vedran Krivokuća

2

Persönlich gehe ich mit Klammern.

Warum?

Nun, wenn irgendjemand vorbeikommt und Code in die if-Anweisung einfügen muss, ist zu 100% klar, wo der Gültigkeitsbereich liegt.

Es hält das Format von ifAnweisungen konsistent, unabhängig davon, wie viele Anweisungen sich im Block befinden.

Wenn Sie jedoch auf den Projektstil verzichten möchten, bleiben Sie dabei.


1

Ich benutze fast immer die Klammern, um auf der sicheren Seite zu sein. Manchmal jedoch, wenn der Inhalt des Blocks wirklich kurz ist, lasse ich ihn weg und mache ihn zu einem Einzeiler wie folgt:

if (x==5) Console.WriteLine("It's a five!");

Schätze, jemand ist kein Fan von Kürze.
JohnFx

2
Kürze der Lesbarkeit halber? Absolut nicht. Es ist Code, kein Golfwettbewerb.
Josh K

3
Ich denke, Lesbarkeit ist ein guter Grund für die Kürze, persönlich. Auf jeden Fall: Leerzeichen zählen in meinem Code-Golf-Regelwerk nicht.
JohnFx

Das einzige Problem dabei ist, dass es sich missbrauchen lässt
Conrad Frix

2
Dann missbrauche es nicht. Ich sage nicht, verwenden Sie es als Kodierungsstandard. Es kommt einfach oft vor, dass Sie eine wirklich kurze Bedingung gefolgt von einer wirklich kurzen Einzelaussage haben und dies funktioniert gut. Zum Beispiel ein if (assert) log.write ("assert failed");
JohnFx

1

Ich bevorzuge geschweifte Klammern, um die Konsistenz zu gewährleisten, aber nicht zu viel Leerraum zu verschwenden (so dass lesbarer formatierter Code in meinem begrenzten Sichtfeld liegt). Also schreibe ich das für ausreichend kurze Zeilen:

If (cond) { statement; }

Interessant, ich sehe Code nicht wirklich so, aber ich mag es irgendwie.
Thomas Eding

0

Ich benutze normalerweise Zahnspangen, aber es gibt Fälle, in denen ich keine habe.

object GetObject() {
    // calculate obj1
    if(obj1 != null)
        return obj1;

    // calculate obj2
    if(obj2 != null)
        return obj2;

    // calculate obj3
    if(obj3 != null)
        return obj3;

    return defaultObj;
}

Für mich wäre es einfach dumm, sie dort hinzuzufügen. Wenn jemand nach dem eine Aussage hinzufügt return, haben wir größere Probleme als Scoping-Probleme.


Sie könnten genauso gut verwendenreturn (obj != null) ? obj : "Error";
Josh K


In diesem Fall würde ich so etwas verwenden Object returnObj = defaultObj; /* Three else-if's to change it to obj1/2/3 */ return returnObj;.
Josh K

@Josh, lies dich durch stackoverflow.com/questions/36707/… . Erster Kommentar zur ersten Antwort: "Obwohl das Vorhandensein mehrerer Austrittspunkte außer Kontrolle geraten kann, halte ich es auf jeden Fall für besser, als Ihre gesamte Funktion in einen IF-Block zu setzen ."
Hinweis für sich selbst - denken Sie an einen Namen

0

Wenn die IDE über eine verfügbare Code-Formatierung verfügt, verwende ich keine geschweiften Klammern.

Wenn Code in anderen Editoren bearbeitet werden kann, die keine automatische Formatierung unterstützen, ist es jedoch gefährlich, keine geschweiften Klammern zu setzen, wie in anderen Beiträgen erwähnt. Aber ich bevorzuge es trotzdem, keine Zahnspange zu verwenden, und das war für mich kein Problem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.