it-swarm.dev

Was ist der Unterschied zwischen K & R- und One True Brace Style (1TBS) -Stilen?

Ich habe den Wikipedia-Artikel über Einrückungsstile gelesen, aber ich verstehe ihn immer noch nicht. Was ist der Unterschied zwischen K & R und 1 TB?

48
GavinR

Der größte Unterschied zwischen K & R und dem One True Brace Style (1 TB) besteht darin, dass in den 1 TB alle Anweisungen if, else, while und for enthalten sind Öffnen und Schließen von Zahnspangen, auch wenn diese nicht erforderlich sind. Der Zweck besteht darin, das Einfügen neuer Anweisungen zu vereinfachen und genau zu wissen, wie sie gruppiert werden.

Als Beispiel:

K & R:

int i;
for (i = 0; i < 10; i++)
  printf("Hi.");

1 TB:

int i;
for (i = 0; i < 10; i++) {
  printf("Hi");
}
76
Thomas Owens

K & R ist wie folgt:

if (x) 
    a();
else {
    b();
    c();
}

Das heißt: Klammern werden nur bei Bedarf verwendet, Klammern in derselben Zeile wie die Steueranweisung öffnen und Klammern in der eigenen Zeile schließen.

Der "One True Brace Style" (1 TB oder OTBS) verwandelt eine einzelne kontrollierte Anweisung in eine zusammengesetzte Anweisung, indem sie in geschweifte Klammern eingeschlossen wird:

if (x) {
    a();
} else {
    b();
    c();
}

Der Allman-Stil geht etwas weiter als 1 TB und erzwingt einen vertikalen Abstand, indem die öffnende Klammer auch selbst auf einer Linie platziert wird:

if (x) 
{
    a();
}
else 
{
    b();
    c();
}

Bearbeiten:

Ich versuche immer noch genau herauszufinden, wie es sich als "arrogant" herausstellt, zu sagen "Dennis Ritchie war ein extrem kluger Kerl, der nicht nur eine gute Sprache erfunden hat, sondern auch eine wirklich gute Klammer gefunden hat Stil dafür. "

Für diejenigen, die darauf bestehen, dass es sowieso arrogant ist, ist hier eine kleine Herausforderung: Gehen Sie zu Sourceforge, Github (usw.) und wählen Sie Projekte im K & R-Klammerstil aus. Durchsuchen Sie die Aufzeichnungen zu Fehlern und Festschreibungen und versuchen Sie, einen single Fehler zu finden, der durch den von ihnen verwendeten Klammerstil verursacht wurde.

Wenn Sie nicht so viel arbeiten möchten, führen Sie eine einfache statistische Analyse durch. Vergleichen Sie Projekte mit verschiedenen Klammerstilen und prüfen Sie, ob Sie "Bimodalität" anzeigen können - ein statistisch signifikanter Unterschied in der Anzahl der Fehler (Schweregrad usw.), der mit dem Klammerstil korreliert.

Ich habe beides vor ein paar Jahren gemacht und konnte keinen einzigen Fehler finden, den ich Klammerstilen zuschreiben konnte, noch konnte ich etwas finden, das sich einer statistisch signifikanten Korrelation zwischen den beiden annäherte. Im Durchschnitt hatten diejenigen, die K & R-Klammern verwendeten, etwas weniger Fehler, aber der Unterschied war viel zu gering, um als statistisch signifikant zu gelten.

Da es aufgerufen wurde, werde ich die Situation mit Makros mit mehreren Anweisungen kommentieren. Ein Makro, das mehrere Anweisungen enthält, diese jedoch nicht mit geschweiften Klammern umgibt, weist einen Fehler auf. Mein Job ist nicht Code zu schreiben, der diesen Fehler vertuscht. Im Gegenteil, meine Aufgabe ist es, diesen Fehler so schnell wie möglich zu finden und zu beseitigen.

Das Schreiben von Code in der Hoffnung, Fehler zu vertuschen, damit sie nicht diagnostiziert und nicht behoben werden, ist geradezu böse. Nennen Sie das arrogant, wenn Sie möchten, aber ich sehe dies nicht als annähernd verhandelbar an. Fehler sollten gefunden und behoben werden, nicht vertuscht. Je länger sie existieren, desto wahrscheinlicher ist es, dass ihre Reparatur viel schwieriger und teurer wird.

20
Jerry Coffin

Das Problem im Allgemeinen beim KR-Klammerstil liegt im Code-Refactoring. Wenn Sie Code verschieben, ist es leicht zu übersehen, dass es keine Klammern um etwas gibt, verschieben Sie ihn falsch (oder verschieben Sie etwas darunter, weil Sie glauben, dass es bedingt ausgeführt wird) und kratzen Sie sich dann entweder am Kopf, wenn etwas nicht mehr funktioniert, oder seien Sie unglücklich und befinden Sie sich darin Ein Codebereich, der nicht gut getestet wurde und der Fehler bleibt unbemerkt, bis ein schwarzer Hut einen Weg findet, ihn auszunutzen. Ein kurzer Einstieg in den Debugger findet das Problem leicht, wenn Sie es bemerken, aber wenn Sie es nicht tun ...

10
Justin Swanhart