One of the nice things about using block delimiters (I.e.: Braces in C-Styled languages, or begin/end in Pascal-like languages) is that when used singly and on a separate line, they introduce additional white-space in your code. Now, without getting into a battle over hanging-brace vs inline-brace style choices, the point is simply that insofar as the compiler doesn't care either way, adding a little extra space helps to improve readability (particularly for those of us with eyes that aren't quite as young as they used to be!!). It's the same trick that you use when you create a resume. More white space makes things stand out better by themselves.
The other reasons to use block delimiters is to make it absolutely clear where something begins and ends. Sure, you can do the following:
DoTheFirstThing();
if (condition)
DoSomething();
DoSomethingElse();
Yet, when reading the code, the eyes can easily skip through the code, and you end up making assumptions about what has occurred as a part of the if statement. Whereas if you were to add a couple of braces:
DoTheFirstThing();
if (condition)
{
DoSomething();
}
DoSomethingElse();
you are making it clearer where the if block actually begins and ends. Of course, if you are pedantic about your indentation, you might argue that a simple indent is enough. Sure if you are used to using a language like Python, you may be used to paying particular attention to your indentation, but does it really make things much clearer? Let's look at a couple more examples. Decide which if statement stands out as the clearest when you take a really quick glance at the following:
DoTheFirstThing();
if (condition)
DoSomething();
DoSomethingElse();
DoTheSecondThing();
if (condition)
{
DoSomething();
}
DoSomethingElse();
Now do the same as the previous example, with this:
DoTheFirstThing();
if (condition)
DoSomething();
DoSomethingElse();
DoTheFirstThing();
if (condition)
{
DoSomething();
}
DoSomethingElse();
Out of the two examples, the very last if statement with the greater amount of whitespace stands out, and the code appears clearer, even though it is exactly the same.
So to really answer the OP's question, is it Bad to bunch things up and avoid brackets? My answer is no, and that I think calling it bad or poor or some other negative is laying it on a bit strongly. The compiler doesn't really care, and the code will work exactly the same. However, it is certainly more readable if you add the braces, and is shows the purpose of the If statement more clearly. More importantly perhaps, is that it shows that you are taking a little care to ensure the quality of your work stands out. It's like the difference between quickly painting a wall with a wide paint-brush once, or using a roller and carefully applying two coats of paint. Just as it is important to look at the finish of a paint job, so to the extra care taken in your code shows that you are willing to take the time to ensure others will not find it difficult to read through your work. This pays itself back when you need to revisit the code months or even years later, or when someone else needs to support you code after you're done.
Carefully written, clean, readable code inspires confidence in the code, while messy looking code will usually inspire an it's awful and too hard to work with attitude towards the code. Attention to detail shows a difference between the careful professional, and the less careful programmer. It inspires trust in your work, and is a pleasure to work with.
someBoolVar = (cond)? true : false;
is a little more cleaner than a fatif...else
block with superfluous braces.