· Chuck Conway · Programming · 2 min read
With or Without Curly Braces?
There’s a heated debate around single statements and whether they should have curly braces or not.
There’s a heated debate around single statements and whether they should have curly braces or not.
In C++, C#, Java, and Javascript a single line statement without curly braces is valid, some take advantage of this feature, while others don’t.
For Example
if(ifTrue)
MowTheLawn();
for(var index; index > 10; index++)
ChopWood();
foreach(var dollar in money)
BuyLollipop();
while(untilTheEnd)
Read();
Arguments Against Single Line Curly-Braces
The argument against curly-braces are it’s terser syntax, it’s fewer characters to type, and it’s valid syntax. Why not take advantage of it?
Arguments For Single Line Curly-Braces
The argument for curly-braces is consistency, fewer bugs and more natural to mentally parse.
In an article written by Jon Abrams titled Single-line ‘if’ statements, Jon explains how a defect in Apple’s TLS implementation was introduced as a result of a single line if statement without curly-braces. Jon goes on to say while omitting curly braces in single-line statements is terser, preventing defects is more important than terseness.
Jon proposes a compromise, to allow single-line statements if they are truly on a single line:
if(ifTrue) MowTheLawn();
I echo Jon’s thoughts, omitting the curly-braces in single lines isn’t worth the benefit it offers. It forces the software engineer to consider two variations of valid syntax. It may not seem so bad, but it’s taxing to make this determination each time you happen upon an if statement. The next effect is the engineer saves a few keystrokes and passes the burden on to future readers to parse their code.
For the C# Software Engineers, Microsoft has taken a side in their coding conventions, which call for curly braces.
When we use curly-braces in all cases regardless of the number of lines, what’s in scope and what’s out of scope is very clear. This makes the code less error-prone and more consistent, although some might argue this point, I find it easier to read.