Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346959
  • 博文数量: 97
  • 博客积分: 2130
  • 博客等级: 大尉
  • 技术积分: 1800
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-24 11:51
文章分类
文章存档

2013年(57)

2012年(40)

我的朋友

分类: C/C++

2013-02-19 09:53:47

常见的编码陷阱

6.避免三元冗余

在JavaScript和PHP中,过度使用三元语句是很常见的事情:

1         //javascript

2         returnfoo.toString()!==""?true:false;

3         //php

4         return(something())?true:false;

条件判断的返回值永远只有false和true,言外之意就是你无需把true和false显示添加到三元运算中。相反,你只需简单的返回条件:

5         //javascript

6         returnfoo.toString()!=="";

7         //php

8         returnsomething();

PHP

7.适当的时候使用三元操作

If...else语句是大多数语言的重要组成部分。但有些简单的事情,比如根据条件进行赋值,你很有可能会这样写:

9         if($greeting)

10     {

11     $post->message='Hello';

12     }

13     else

14     {

15     $post->message='Goodbye';

16     }

其实使用三元操作只需一行代码就可以搞定,并保持了良好的可读性:

17     $post->message=$greeting?'Hello':'Goodbye';

8.抛出异常,而不是采用盗梦空间式的嵌套(Inception-Style Nesting

多层次的嵌套是丑陋的、难以维护和不可读的。下面的代码是个简单的例子,但是随着时间的推移会变得更糟:

18     //anti-pattern

19     $error_message=null;

20     if($this->form_validation->run())

21     {

22     if($this->upload->do_upload())

23     {

24     $image=$this->upload->get_info();

25     if(!$this->image->create_thumbnail($image['file_name'],300,150))

26     {

27     $error_message='Therewasanerrorcreatingthethumbnail.';

28     }

29     }

30     else

31     {

32     $error_message='Therewasanerroruploadingtheimage.';

33     }

34     }

35     else

36     {

37     $error_message=$this->form_validation->error_string();

38     }

39     //Showerrormessages

40     if($error_message!==null)

41     {

42     $this->load->view('form',array(

43     'error'=>$error_message,

44     ));

45     }

46     //Savethepage

47     else

48     {

49     $some_data['image']=$image['file_name'];

50     $this->some_model->save($some_data);

51     }

如此凌乱的代码,是否该整理下呢。建议大家使用异常这个清洁剂:

52     try

53     {

54     if(!$this->form_validation->run())

55     {

56     thrownewException($this->form_validation->error_string());

57     }

58     if(!$this->upload->do_upload())

59     {

60     thrownewException('Therewasanerroruploadingtheimage.');

61     }

62     $image=$this->upload->get_info();

63     if(!$this->image->create_thumbnail($image['file_name'],300,150))

64     {

65     thrownewException('Therewasanerrorcreatingthethumbnail.');

66     }

67     }

68     //Showerrormessages

69     catch(Exception$e)

70     {

71     $this->load->view('form',array(

72     'error'=>$e->getMessage(),

73     ));

74     //Stopmethodexecutionwithreturn,oruseexit

75     return;

76     }

77     //Gotthisfar,mustnothaveanytrouble

78     $some_data['image']=$image['file_name'];

79     $this->some_model->save($some_data);

虽然代码行数并未改变,但它拥有更好的可维护性和可读性。尽量保持代码简单。

阅读(1371) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~