Ryan McDermott 23923fe974 First commit
2016-11-11 18:23:24 -08:00

125 lines
2.2 KiB
Markdown

# clean-code-javascript
Software engineering principles, from Robert C. Martin's wonderful book *Clean Code*, adapted for JavaScript.
## **Variables**
### Use meaningful and pronounceable variable names
**Bad:**
```javascript
var yyyymmdstr = moment().format('YYYY/MM/DD');
```
**Good**:
```javascript
var yearMonthDay = moment().format('YYYY/MM/DD');
```
### Use the same vocabulary for the same type of variable
**Bad:**
```javascript
getUserInfo();
getClientData();
getCustomerRecord();
```
**Good**:
```javascript
getUser();
```
## **Functions**
### Limit the amount of function parameters (2 or less)
Use an object if you are finding yourself needing a lot of parameters
**Bad:**
```javascript
function createMenu(title, body, buttonText, cancellable) {
...
}
```
**Good**:
```javascript
var menuConfig = {
title: 'Foo',
body: 'Bar',
buttonText: 'Baz'
cancellable: true
}
function createMenu(config) {
...
}
```
### Don't use flags as function parameters
Flags tell your user that this function does more than one thing. Functions should do one thing. Split out your functions if they are following different code paths based on a boolean.
**Bad:**
```javascript
function createFile(name, temp) {
if (temp) {
fs.create('./temp/' + name);
} else {
fs.create(name);
}
}
```
**Good**:
```javascript
function createTempFile(name) {
fs.create('./temp/' + name);
}
function createFile(name) {
fs.create(name);
}
```
## **Comments**
### Only comment things that have business logic complexity.
Comments are an apology, not a requirement. Good code *mostly* documents itself.
**Bad:**
```javascript
function hashIt(data) {
// The hash
var hash = 0;
// Length of string
var length = data.length;
// Loop through every character in data
for (var i = 0; i < length; i++) {
// Get character code.
var char = i.charCodeAt(i);
// Make the hash
hash = ((hash << 5) - hash) + char;
// Convert to 32-bit integer
hash = hash & hash;
}
}
```
**Good**:
```javascript
function hashIt(data) {
var hash = 0;
var length = data.length;
for (var i = 0; i < length; i++) {
var char = i.charCodeAt(i);
hash = ((hash << 5) - hash) + char;
// Convert to 32-bit integer
hash = hash & hash;
}
}
```