抽象配置

  1. //bad
  2. if (condition === 'a') {
  3. doA()
  4. } else if (condotion === 'b') {
  5. doB()
  6. } else if ...
  7. //good
  8. const CONDITIONS = {
  9. a: doA,
  10. b: doB,
  11. ...
  12. }
  13. CONDITIONS[condition]()

单一职责

  1. //bad
  2. function xxx() {
  3. val1 = ...
  4. val2 = ...
  5. if (conditionA) {
  6. ...
  7. val1 = ...
  8. } else if (conditionB) {
  9. val2 = ....
  10. }
  11. for (let i=0; i<val1; i++) {
  12. doSomeThing(val2[i])
  13. }
  14. }
  15. //good
  16. function getVal1 () {
  17. ...
  18. return val1
  19. }
  20. function getVal2 () {
  21. ...
  22. return val2
  23. }
  24. function iterate (val1, val2) {
  25. for (let i=0; i<val1; i++) {
  26. doSomeThing(val2[i])
  27. }
  28. }
  29. function xxx() {
  30. iterate(getVal1(),getVal2());
  31. }

使用 break 和 return 代替控制标记

  1. //bad
  2. function xxx () {
  3. let flag = false;
  4. for (let i=0; i<val1; i++) {
  5. if (!flag) {
  6. if (i === ....) {
  7. flag = true
  8. doSomeThing(val2[i])
  9. }
  10. }
  11. }
  12. }
  13. //good
  14. function xxx () {
  15. let flag = false;
  16. for (let i=0; i<val1; i++) {
  17. if (i === ....) {
  18. doSomeThing(val2[i])
  19. break;
  20. }
  21. }
  22. }

函数取代参数

  1. //bad
  2. function setVal(name, val) {
  3. if (name === 'a') {
  4. a = val
  5. } else if (name === 'b') {
  6. b = val
  7. }
  8. }
  9. //good
  10. function setA (val) {
  11. a = val
  12. }
  13. function setB (val){
  14. v =val
  15. }

逆向条件

  1. //bad
  2. function xxx() {
  3. if (condition === 'a' || condition === 'b' || condition === 'c') {}
  4. }
  5. //good
  6. function xxx() {
  7. if (condition !== 'd') {}
  8. }

合并条件

  1. //bad
  2. function xx () {
  3. if (num === 0) {
  4. return 0
  5. } else if (num === 1) {
  6. return 1
  7. } else if (num === 2) {
  8. return 4
  9. } else if (num === 3) {
  10. return 6
  11. }
  12. }
  13. //good
  14. function xx() {
  15. if ([0,1].includes(num)) {
  16. return num
  17. } else if ([2,3].includes(num)) {
  18. return num * 2
  19. }
  20. }

条件语义化

  1. //bad
  2. function xx() {
  3. if ( (a > 1 && b >2) || (c>3 && d>4) || (!val1 && !val2)) {
  4. ...
  5. }
  6. }
  7. //good
  8. function isXXX1() {
  9. return a > 1 && b >2
  10. }
  11. function isXXX2() {
  12. return c>3 && d>4
  13. }
  14. function isNotXXX3() {
  15. return !val1 && !val2
  16. }
  17. function xx () {
  18. if (isXXX1 || isXXX2 || isNotXXX3()) { ...}
  19. }

禁止多层条件判断嵌套

  1. //bad
  2. if (conditionA) {
  3. if (conditionA1) {
  4. if (...){}
  5. } else if (conditionA2) {
  6. if (...) {}
  7. }
  8. } else if (conditionB) {
  9. if (conditionB1) {
  10. if (...){}
  11. } else if (conditionB2) {
  12. if (...) {}
  13. }
  14. } else {
  15. if (conditionC1) {
  16. if (...){}
  17. } else if (conditionC2) {
  18. if (...) {}
  19. }
  20. }
  21. // good
  22. if (conditionA) {
  23. conditionA()
  24. } else if (conditionB) {
  25. conditionB()
  26. } else {
  27. conditionC()
  28. }