yujiri.xyz
Software
Braceless body in semicolon languages is bad design
In C, Javascript, and Zig, conditions of `if` and `while` statements always have to be wrapped in parentheses, while in Rust and Go, they don't. It's because in C, Javascript and Zig, the *body* of such a statement *doesn't* have to be wrapped in braces, if it's only one line, and there has to be a way for the parser to tell the separation between condition and body. In these languages the syntax is: `if (condition) body`, while in Rust and Go the syntax is `if condition { body }`.
What Rust and Go do here is better, for two reasons:
- The braceless body is a mistake hazard. It's common that you write an if statement with a one-line body and then later add a second line to the body; if you didn't include the braces before, it's easy to forget to add them now and get a bug. I've met people who insist that you should always include braces anyway for this reason.
- Parentheses around conditions that themselves end with parentheses result in stacks of parentheses that are hard to read.