← #147 Avoid using the <b>, <i>, <s> and <u> tags
#148

Avoid boolean parameters

Topics: JavaScript

Let's consider a situation where we have a function that writes a string to a file. It allows user to append the content to file, or override the content via the override parameter:

const writeToFile = (content: string, file: string, override: boolean) => {
...
};

With that signature, the function will be invoked as following

// Append the content to file
writeToFile(content, file, true);

// Override the file
writeToFile(content, file, false);

If you are not the one who creates the function, you have to question what the boolean value represents until looking at the implementation.

It is worse if the function has a lot of boolean flags. Using boolean flags makes the core harder to read and maintain.

There are a few ways to get rid of the issue.

Provide explicit methods

appendToFile(content, file);
overrideFile(content, file);

Use an object parameter

writeToFile(content, file, { override });

Use an enum

If you're using TypeScript, then you can use enum to represent the possible values of a boolean flag.

enum SaveMode {
Append,
Override,
}

writeToFile(content, file, mode: SaveMode);

It's confident for consumers to call the method:

writeToFile(content, file, SaveMode.Append);

// Or
writeToFile(content, file, SaveMode.Override);

More

Fix a typo or suggest an improvement
#149 Avoid using multiple <h1> tags per page