常见的编码陷阱4

 常见的编码陷阱

9.False——Happy方法

RubyPython开发者常常关注一些微小的异常,这是相当不错的事情。如果有地方出错就会抛出异常并且你会立即知道问题所在。

PHP中,特别是使用比较老的框架,如CodeIgniter,与抛出异常相比,它仅仅返回一个flase值,并且把错误字符串分配给其他一些属性。这就驱使你使用get_error()方法。

Exception-happy远远好于false-happy。如果代码里面存在错误(例如不能连上S3下载图片,或者值为空等),然后抛出一个异常,你也可以通过继承Exception类来抛出特定的异常类型,例如:

1         classCustomExceptionextendsException{}

抛出自定义类型异常会让调试变得更加容易。

10.Use Guard Clauses

使用if语句控制函数或方法的执行路径是很常见的事情,如果if条件为true就执行if里面的代码,否则就执行else里面的代码。例如下面这段代码:

2         functionsomeFunction($param){

3         if($param=='OK'){

4         $this->doSomething();

5         returntrue;

6         }else{

7         returnfalse;

8         }

9         }

这是很常见的意大利面条式的代码,通过转换条件对上述代码进行优化,不仅可以增加其可读性,看起来还会更加简单,如下:

10     functionsomeFunction($param){

11     if($param!='OK')returnfalse;

12     $this->doSomething();

13     returntrue;

14     }

11.使用While进行简单的迭代

使用for进行循环是很常见的事情:

15     for(vari=0;i<x;i++){

16     ...

17     }

当然,for循环也有许多优势,但是对于一些的循环,使用while或许会更好:

18     vari=x;

19     while(i--){

20     ...

21     }

12.保持方法可维护性

让我们来看一下这个方法:

22     classSomeClass{

23     functionmonsterMethod(){

24     if($weArePilots){

25     $this->goAndDressUp();

26     $this->washYourTeeth();

27     $this->cleanYourWeapon();

28     $this->takeYourHelmet();

29     if($this->helmetDoesNotFit())

30     $this->takeAHat();

31     else

32     $this->installHelmet();

33     $this->chekcYourKnife();

34     if($this->myAirplain()=="F22")

35     $this->goToArmyAirport();

36     else

37     $this->goToCivilianAirport();

38     $this->aim();

39     $this->prepare();

40     $this->fire();

41     }

42     }

43     }

再看如下代码:

44     classSomeClass{

45     functionmonsterMethod(){

46     if($weArePilots){

47     $this->prepareYourself();

48     $this->tryHelmet();

49     $this->findYourAirport();

50     $this->fightEnemy();

51     }

52     }

53     privatefunctionprepareYourself(){

54     $this->goAndDressUp();

55     $this->washYourTeeth();

56     $this->cleanYourWeapon();

57     $this->chekcYourKnife();

58     }

59     privatefunctiontryHelmet(){

60     $this->takeYourHelmet();

61     if($this->helmetDoesNotFit())

62     $this->takeAHat();

63     else

64     $this->installHelmet();

65     }

66     privatefunctionfindYourAirport(){

67     if($this->myAirplain()=="F22")

68     $this->goToArmyAirport();

69     else

70     $this->goToCivilianAirport();

71     }

72     privatefunctionfightEnemy(){

73     $this->aim();

74     $this->prepare();

75     $this->fire();

76     }

77     }

对比两段代码,第二段代码更加简洁、可读和可维护。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章