# Java Notes

# Braces are your friend

## Braces `{ }` not required for one statement (but are always good)

If the `true` or `false` clause of an `if` statement has only one statement, you do not need to use braces (also called "curly brackets"). This braceless style is dangerous, and most style guides recommend always using them.

## Braceless form

The `if` statement doesn't need braces if there is only one statement in a part. Here both the `true` and `false` parts have only one statement:

    // Legal, but dangerous.
    if (condition)
        Exactly one statement to execute if condition is true
    else
        Exactly one statement to execute if condition is false

## Examples showing what can go wrong

### A sample written with braces.

    //... Good style - Indented with braces.
    String comment = "Not so bad.";
    if (marks < 60) {
        comment = "This is terrible.";
    }
    System.out.println(comment);

### Without braces it's still correct, but not as safe.

    //... Less good style - Indented but without braces.
    String comment = "Not so bad.";
    if (marks < 60)
        comment = "This is terrible.";
    System.out.println(comment);

What can go wrong?

### Q1: What does this "legal" version print?

    //... What does this print?
    String comment = "Not so bad.";
    if (marks < 60);
        comment = "This is terrible.";
    System.out.println(comment);

A: it always prints "This is terrible" because of that semicolo after the if clause. The semicolon indicates an empty statement, which satisfies the compiler, but is surely not what you intended. Putting a beginning brace after the if condition prevents programmers from also adding a semicolon and creating this kind of error.

### Q2: What's wrong with this?

So your program is working OK without the braces and you decide to add a grade. The compiler is very happy with this, but you won't be. Why?

    //... What does this print?
    String comment = "Not so bad.";
    String grade   = "A";
    if (marks < 60)
        comment = "This is terrible.";
        grade   = "F";
    System.out.println("Your grade is " +grade);
    System.out.println(comment);

A: Although the comment will be appropriate to the score, the grade will always be "F". Although the second `grade` assignment is indented, it isn't inside the if because the unbraced clause only includes one statement! This appearance of being included is a major source of programming errors.

## Other Java constructions use braces

There are many kinds of Java statements that use braces to group things. You've already seen class and method (eg, main) declarations, which enclose their contents in braces. In addition to ifs, you'll learn about loops (for, while, and do), try...catch, and switch statements which use braces to enclose other statements.

## References

- Braceless if considered harmful (cafe.elharo.com/java/braceless-if-considered-harmful/)