BlogPost_BooleanNames #22
@ -13,19 +13,24 @@ Boolean names should be [negatable](https://www.yourdictionary.com/negatable) an
|
|||||||
|
|
||||||
_The Elements of Style_ <sup>1</sup>, is a concise guide to writing English. Some rules can be used as a guide for writing code as well. For example, rule 11, "Put statements in positive form," can be applied to naming boolean variables. In code, there is one additional requirement: the statement must be positive as well. 'enabled' is in the positive form and a positive statement. 'disabled' is in the positive form, but is a negative statement. 'notEnabled' is both in the negative form and a negative statement.
|
_The Elements of Style_ <sup>1</sup>, is a concise guide to writing English. Some rules can be used as a guide for writing code as well. For example, rule 11, "Put statements in positive form," can be applied to naming boolean variables. In code, there is one additional requirement: the statement must be positive as well. 'enabled' is in the positive form and a positive statement. 'disabled' is in the positive form, but is a negative statement. 'notEnabled' is both in the negative form and a negative statement.
|
||||||
|
|
||||||
In English, it is best to use enabled or disabled, and to avoid "not enabled"; they are more concise and stay in the positive form. The extra requirement of using a positive statement for boolean names is because the negations of boolean variables have meaning as well; in writing "not disabled" is a double negative and is discouraged. In code, '!disabled', is also a double negative, and should be avoided.
|
In English, it is best to use enabled or disabled, and to avoid "not enabled"; they are more concise and stay in the positive form. The extra requirement of using a positive statement for boolean names is because the negations of boolean variables have meaning as well; in writing, "not disabled" is a double negative and is discouraged. In code, '!disabled', is also a double negative, and should be avoided.
|
||||||
|
|
||||||
A boolean name should give the reader more clarity as it's scope expands. A boolean variable that exists for the scope of an if statement may have a short name ('ok'). If this variable was in scope throughout the function, it would become meaningless.
|
A boolean name should give the reader more clarity as its scope expands. A boolean variable that exists for the scope of an if statement may have a short name ('ok'). If this variable was in scope throughout the function, it would become meaningless.
|
||||||
|
|
||||||
## Bad Boolean Names
|
## Bad Boolean Names
|
||||||
As with many things in software engineering, it is easier to find mistakes than to do something correctly the first time. Here are some naming conventions to avoid:
|
As with many things in software engineering, it is easier to find mistakes than to do something correctly the first time. Here are some naming conventions to avoid:
|
||||||
1. Names that are already a negation. 'featureTurnedOff' and 'notProd' may make sense in one use case, but becomes confusing in a larger context. This can lead to code such as, `confA.useProd = !confB.notProd`. This is both hard to read and ambiguous (what if there is a third environment).
|
1. Names that are already a negation. 'featureTurnedOff' and 'notProd' may make sense in one use case, but becomes confusing in a larger context. The following code is both hard to read and ambiguous (what if there is a third environment).
|
||||||
|
```golang
|
||||||
|
|
||||||
2. Names that are not negatable. A name such as, 'sheets', has ambiguous meaning. It probably has something to do with a spreadsheet, but it is the writer's responsibility to prevent the reader from needing to do an investigation.
|
confA.useProd := !confB.notProd
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Names that are not negatable. A name such as 'sheets' has ambiguous meaning. It probably has something to do with a spreadsheet, but it is the writer's responsibility to prevent the reader from needing to do an investigation.
|
||||||
|
|
||||||
3. Names that are in negative form. These typically appear when the default use is the negative form. For example, 'disabled' for a service typically disabled. Keep all the names in positive form to avoid a future headache explaining what the billing system does when it's "not disabled". Is it now enabled, or is it just not disabled?
|
3. Names that are in negative form. These typically appear when the default use is the negative form. For example, 'disabled' for a service typically disabled. Keep all the names in positive form to avoid a future headache explaining what the billing system does when it's "not disabled". Is it now enabled, or is it just not disabled?
|
||||||
|
|
||||||
4. Overly general names. As discussed earlier, this depends on the scope of the name. Avoid using a name such as, 'on'. It leaves questions in the reader's mind such as, "What thing is on?". The exception to this is typical boolean names used across code bases; Go's 'ok' is an example of this.
|
4. Overly general names. As discussed earlier, this depends on the scope of the name. Avoid using a name such as 'on'. It leaves questions in the reader's mind such as "_Which_ thing is on?". The exception to this is typical boolean names used across code bases; Go's 'ok' is an example of this.
|
||||||
|
|
||||||
5. Negatable adjectives without context. 'bool customSize' is clear, but without the 'bool' context, the type is unclear. Ambiguity can be removed by prefixing 'is' or 'has' ('isCustomSize').
|
5. Negatable adjectives without context. 'bool customSize' is clear, but without the 'bool' context, the type is unclear. Ambiguity can be removed by prefixing 'is' or 'has' ('isCustomSize').
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user