checking in
This commit is contained in:
		| @@ -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'). | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user