Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1744642
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: C/C++

2012-03-25 18:30:05

Decompose Conditional 分解条件语句:条件判断不要太复杂,容易让人看不懂。if (t > 12 && t < 13) => if (IsLunchTime(t))

 

Cosolidate Conditional Expression 合并条件语句:int result; if (a > 5) result = 0; else if (a < 0) result = 0; => if (a > 5 || a < 0) result = 0;

 

Cosolidate Duplicate Conditional Fragments 合并重复的条件片段:if (a > 5) { DoSomeThing(); DoThis(); } else {DoSomethingElse(); DoThis();} => if (a>5) DoSomething(); else DoSomethingElse(); DoThis(); 两个条件分支做了一件同样的事,把这件事情提出分支外面。

 

Remove Control Flag 去除控制标志:老式编程风格经常 看到While里有个bool变量,并用这个变量控制循环的结束:while(condition) { if (TimeToGetOut()) condition = false;} 试试这个:while(condition) { if (TimeToGetOut()) break; } 这样的程序可读性很强。单一入口,单一出口的编程经验已经过时了。原来的One exit point是为了保证所有的变量都能正确地unintialize,现在已经有对象了,不必这样了。程序可读性是现在最追求的。

 

Replace Nested Conditional with Guard Clauses 用守卫语句代替嵌套条件语句: 原来的One exit point原则会使得函数里出现巨大的复杂的嵌套的if-else块。现在时代变了。一些不常见的情况发生时,直接return,程序可读性大大增加。 f(int a) { bool result; if (a < 0) {result = false;} else {a+=5; result = true} return true; => f(int a) { if (a < 0) return false; a+=5; return true; }

 

Replace Coditional with Polymorphism 用多态代替条件语句: 如果条件分支是根据类型来实现不同的行为,比如 class Employee { Work() { if (type == Engineer) WriteCode(); else if (type == Manager) TalkTalkTalk(); :-) } 改用多态吧。class Employee { virtual Work(); } class Engineer : Employee { Work() { WriteCode(); } } class Manager { Work() { TalkTalkTalk(); } }。多态的好处嘛,很多了。容易扩展就是一条。

 

Introduce Null Object 引入Null对象:对象可能 会是空值,有时这是很烦的事情。每次对一个对象进行操作时,都要进行null判断。比如 f(Person p) { if (p != null) print("I'm Null"); else p.DoSomeThing(); } 如果我加入一个Null对象:class NullPerson : Person { void DoSomeThing() { print("I'm Null"); } 这样一来,我就不用进行null判断了。f(Person p) { p.DoSomeThing(); } 当Person为null时,调用f(new NullPerson)就OK了。

 

Introduce Assertion 引入断言:precondition是很重要的,减少很多定位bug的时间。实战经验。

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