mirror of
https://github.com/ryanmcdermott/clean-code-javascript.git
synced 2025-04-07 22:41:49 +08:00
First commit
This commit is contained in:
commit
23923fe974
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Ryan McDermott
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE
|
124
README.md
Normal file
124
README.md
Normal file
@ -0,0 +1,124 @@
|
||||
# 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;
|
||||
}
|
||||
}
|
||||
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user