Code Should Breathe
Note: This is my opinion. If you have thoughts or concerns, that's fine - feel free to message me.
In programming, there can be an obsession with brevity, compactness and cleverness (i.e. magic). How much can I do in one line? How few lines can I have in my component? How much can I abbreviate my variable names? All of this leads to the code equivalent of hyperventilation.
What if we let our code breathe a little? “Breathing room” here is defined as extra lines and empty space within code. Here are a couple ways this can be accomplished.
Use Blank Lines To Create Sections
A List Apart had a great article about the use of whitespace in web design entitled simply, Whitespace. This piece refers to a concept called active whitespace, “whitespace added to a composition to better emphasize or structure, information.” In code, use whitespace (blank lines) to clearly separate imports, methods, and so on. Here's an example from this website:
// External
import { parseISO } from "date-fns";
import Link from "next/link";
import { withRouter } from "next/router";
// Components
import Page from "@core/page";
// Data
import posts from "@data/posts";
class Writing extends React.Component {
...
And, of course, there are examples of great whitespace usage in the official React docs. See the code examples in the Adding Lifecycle Methods to a Class section. From the A List Apart article, “[W]hitespace creates breathing room and balance. It’s important.”
Lint Rules
If a lint rule exists that enforces adding more lines and space, implement it. One example: vue/html-closing-bracket-newline.
<!-- Example A: -->
<p
id="foo"
class="bar">
baz
</p>
<!-- Example B: -->
<p
id="foo"
class="bar"
>
baz
</p>
Given the two options above, Example B allows for more breathing room. It's easier to understand at a glance. Multiply Example A by a dozen elements with varying numbers of attributes and it becomes increasingly difficult to see where attributes end and text/nested elements begin. I propose that when choosing between two lint rule options, always choose the one that adds more lines and space.
Close Blocks Clearly
While I do enjoy the simplicity of Pug, the template engine formerly known as Jade, I do believe some human processing speed is lost due to the lack of closing tags.
<!-- Example A (Pug) -->
.fancy-link
a(href="/")
| Home
.fancy-link
a(href="/about")
| About
<!-- Example B -->
<div class="fancy-link">
<a href="/">
Home
</a>
</div>
<div class="fancy-link">
<a href="/about">
About
</a>
</div>
While I love the brevity of Pug here, I personally think there's too much left to the imagination. Again, multiply Example A by a dozen different nested elements and it becomes dense and difficult to parse.
Breathe!
On a fun website called Dwitter, contributors are challenged to see what they can create with 140 characters (or less) of JavaScript. While limiting characters can be a fun constraint, this isn't code I want to read on a day-to-day basis. Instead, let's luxuriate in the fact that we have room to breathe.