layout: post title: "C/C++ 编程风格: if-else" date: 2015/07/08 10:50:45 categories: comments: true
我的习惯是直接写成下面这样的逻辑。
{% highlight c++ %} if(a==0 && b == 0){ }else if(a!=0 && b == 0){ }else if (a== 0 && b!=0){ }else if(a!=0 && b!=0) { }else{ assert(0 && "never goes here"); } {% endhighlight %}
原则
- 尽量少使用 if 语句
- 尽量减少 then, else 中的语句。
- 如果使用,条件尽量简单,尽量不适用复合条件判断。
- 如果必须使用复合条件判断,一定包含所有可能性。
- if 语句一定要有 else 语句相随,就算 else 里面啥也没有,也要写一个空 的括号。
有一种常用技巧可以减少 if 语句的使用,例如
{% highlight c++ %} if(cmd == 0){ ret = do_cmd_0(); }else if(cmd == 1){ ret = do_cmd_1() } .... else { asset(0 && "never goes here"); }
or
switch(cmd){ case 0: ret = do_cmd_0(); break; case 1: ret = do_cmd_0(); break; default: assert(0 && "never goes here"); } return ret; {% endhighlight %}
可以写成
{% highlight c++ %} cmd_table[] = { do_cmd_0, do_cmd_1, ... };
ret = cmd_tablecmd; {% endhighlight %}
如果是
{% highlight c++ %} if (a == 0){ do_something_with(1,2,"good"); }else{ do_something_with(1,2,"bad"); } {% endhighlight %}
就可以写成
{% highlight c++ %} do_something_with(1,2,a==0?"good":"bad"); {% endhighlight %}
以尽量缩小 if 语句的控制范围。
真实的代码里面,
{% highlight c++ %} if(a==0){ do_something_xxx(1,2,3); do_other(); }else{ do_something_yyy(4,5,6); do_other(); } {% endhighlight %}
如果是
{% highlight c++ %} if(a==0) { blbbnalla very very long }else { yalayalaya very very long } {% endhighlight %}
一定要把 then 和 else 的内容提各自取成一个函数,不要让 then else 太长。
if else 看似很简单,实际上对代码的可读性有很大的影响。这些改进都是很简 单的改进,小小的改进,积累多了,就清爽多了。如果看不起这些小小的改进, 臭代码积累多了,以后再改就难了。