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 %}

原则

  1. 尽量少使用 if 语句
  2. 尽量减少 then, else 中的语句。
  3. 如果使用,条件尽量简单,尽量不适用复合条件判断。
  4. 如果必须使用复合条件判断,一定包含所有可能性。
  5. 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 看似很简单,实际上对代码的可读性有很大的影响。这些改进都是很简 单的改进,小小的改进,积累多了,就清爽多了。如果看不起这些小小的改进, 臭代码积累多了,以后再改就难了。