File tree
Expand file treeCollapse file tree1 file changed
+68
-0
lines changed Expand file treeCollapse file tree1 file changed
+68
-0
lines changed Original file line number | Diff line number | Diff line change |
---|
@@ -298,6 +298,74 @@ dateAddMonth(date, 1);
|
298 | 298 | ```
|
299 | 299 | **[⬆ back to top](#table-of-contents)**
|
300 | 300 |
|
| 301 | +### Functions should only be one level of abstraction |
| 302 | +When you have more than one level of abstraction your function is usually |
| 303 | +doing too much. Splitting up functions leads to reusability and easier |
| 304 | +testing. |
| 305 | + |
| 306 | +**Bad:** |
| 307 | +```javascript |
| 308 | +function parseBetterJSAlternative(code) { |
| 309 | +let REGEXES = [ |
| 310 | +// ... |
| 311 | +]; |
| 312 | + |
| 313 | +let statements = code.split(' '); |
| 314 | +let tokens; |
| 315 | +REGEXES.forEach((REGEX) => { |
| 316 | +statements.forEach((statement) => { |
| 317 | +// ... |
| 318 | +}) |
| 319 | +}); |
| 320 | + |
| 321 | +let ast; |
| 322 | +tokens.forEach((token) => { |
| 323 | +// lex... |
| 324 | +}); |
| 325 | + |
| 326 | +ast.forEach((node) => { |
| 327 | +// parse... |
| 328 | +}) |
| 329 | +} |
| 330 | +``` |
| 331 | + |
| 332 | +**Good**: |
| 333 | +```javascript |
| 334 | +function tokenize() { |
| 335 | +let REGEXES = [ |
| 336 | +// ... |
| 337 | +]; |
| 338 | + |
| 339 | +let statements = code.split(' '); |
| 340 | +let tokens; |
| 341 | +REGEXES.forEach((REGEX) => { |
| 342 | +statements.forEach((statement) => { |
| 343 | +// ... |
| 344 | +}) |
| 345 | +}); |
| 346 | + |
| 347 | +return tokens; |
| 348 | +} |
| 349 | + |
| 350 | +function lexer() { |
| 351 | +let ast; |
| 352 | +tokens.forEach((token) => { |
| 353 | +// lex... |
| 354 | +}); |
| 355 | + |
| 356 | +return ast; |
| 357 | +} |
| 358 | + |
| 359 | +function parseBetterJSAlternative(code) { |
| 360 | +let tokens = tokenize(code); |
| 361 | +let ast = lexer(ast); |
| 362 | +ast.forEach((node) => { |
| 363 | +// parse... |
| 364 | +}) |
| 365 | +} |
| 366 | +``` |
| 367 | +**[⬆ back to top](#table-of-contents)** |
| 368 | + |
301 | 369 | ### Remove duplicate code
|
302 | 370 | Never ever, ever, under any circumstance, have duplicate code. There's no reason
|
303 | 371 | for it and it's quite possibly the worst sin you can commit as a professional
|
|
You can’t perform that action at this time.
0 commit comments