* docs/hacking.html.in (Curly braces): Tighten recommendations to
disallow if (cond) one-line; else { block; }.
* HACKING: Regenerate.
Suggested by Daniel P. Berrange.
---
> since HACKING documents that an else clause should only ever
omit braces
> when the if clause also omitted braces, but an if clause can omit braces
> even when the else clause requires them.
Hmm, I didn't notice that. I really don't like to see braces in
else clauses, without also seeing braces in the if, and have
been fixing this to add braces whenever I come across it.
Fine by me - how does this look?
HACKING | 35 ++++++++++++++++++++++-------------
docs/hacking.html.in | 34 +++++++++++++++++++++++-----------
2 files changed, 45 insertions(+), 24 deletions(-)
diff --git a/HACKING b/HACKING
index d646709..4a71b37 100644
--- a/HACKING
+++ b/HACKING
@@ -161,33 +161,42 @@ Do this, instead:
However, there is one exception in the other direction, when even a one-line
block should have braces. That occurs when that one-line, brace-less block is
-an "else" block, and the corresponding "then" block *does* use
braces. In that
-case, either put braces around the "else" block, or negate the
"if"-condition
-and swap the bodies, putting the one-line block first and making the longer,
-multi-line block be the "else" block.
+an "if" or "else" block, and the counterpart block *does* use braces.
In that
+case, put braces around both blocks. Also, if the "else" block is much shorter
+than the "if" block, consider negating the "if"-condition and
swapping the
+bodies, putting the short block first and making the longer, multi-line block
+be the "else" block.
if (expr) {
...
...
}
else
- x = y; // BAD: braceless "else" with braced "then"
+ x = y; // BAD: braceless "else" with braced "then",
+ // and short block last
-This is preferred, especially when the multi-line body is more than a few
-lines long, because it is easier to read and grasp the semantics of an
-if-then-else block when the simpler block occurs first, rather than after the
-more involved block:
+ if (expr)
+ x = y; // BAD: braceless "if" with braced "else"
+ else {
+ ...
+ ...
+ }
- if (!expr)
+Keeping braces consistent and putting the short block first is preferred,
+especially when the multi-line body is more than a few lines long, because it
+is easier to read and grasp the semantics of an if-then-else block when the
+simpler block occurs first, rather than after the more involved block:
+
+ if (!expr) {
x = y; // putting the smaller block first is more readable
- else {
+ } else {
...
...
}
-If you'd rather not negate the condition, then at least add braces:
+But if negating a complex condition is too ugly, then at least add braces:
- if (expr) {
+ if (complex expr not worth negating) {
...
...
} else {
diff --git a/docs/hacking.html.in b/docs/hacking.html.in
index 900e242..0d81b0b 100644
--- a/docs/hacking.html.in
+++ b/docs/hacking.html.in
@@ -209,11 +209,13 @@
<p>
However, there is one exception in the other direction, when even a
one-line block should have braces. That occurs when that one-line,
- brace-less block is an <code>else</code> block, and the corresponding
- <code>then</code> block <b>does</b> use braces. In that
case, either
- put braces around the <code>else</code> block, or negate the
- <code>if</code>-condition and swap the bodies, putting the
- one-line block first and making the longer, multi-line block be the
+ brace-less block is an <code>if</code> or
<code>else</code>
+ block, and the counterpart block <b>does</b> use braces. In
+ that case, put braces around both blocks. Also, if
+ the <code>else</code> block is much shorter than
+ the <code>if</code> block, consider negating the
+ <code>if</code>-condition and swapping the bodies, putting the
+ short block first and making the longer, multi-line block be the
<code>else</code> block.
</p>
@@ -223,31 +225,41 @@
...
}
else
- x = y; // BAD: braceless "else" with braced "then"
+ x = y; // BAD: braceless "else" with braced "then",
+ // and short block last
+
+ if (expr)
+ x = y; // BAD: braceless "if" with braced "else"
+ else {
+ ...
+ ...
+ }
</pre>
<p>
- This is preferred, especially when the multi-line body is more than a
+ Keeping braces consistent and putting the short block first is
+ preferred, especially when the multi-line body is more than a
few lines long, because it is easier to read and grasp the semantics of
an if-then-else block when the simpler block occurs first, rather than
after the more involved block:
</p>
<pre>
- if (!expr)
+ if (!expr) {
x = y; // putting the smaller block first is more readable
- else {
+ } else {
...
...
}
</pre>
<p>
- If you'd rather not negate the condition, then at least add braces:
+ But if negating a complex condition is too ugly, then at least
+ add braces:
</p>
<pre>
- if (expr) {
+ if (complex expr not worth negating) {
...
...
} else {
--
1.7.3.4