有时可以用两种方式编写算法:
- 一种简短的幻想方式;要么
- 更长的,易于理解的方式。
例如,这是一种将字符串复制source
到dest
C中的更长,更简单的方法:
*dest = *source;
while (*source != '\0') {
source++;
dest++;
*dest = *source;
} (true);
这是一种简短的幻想方式。
// Copy string source to dest
while (*dest++ = *source++);
我一直听到并读过,应该避免使用花哨的代码,我倾向于同意。但是,如果我们考虑到评论该怎么办?假定像上面的示例一样,我们有一个未注释的,较长的并且据说更易于理解的代码,以及一个注释良好的,简短的,精美的代码?非花哨的代码还是首选吗?
编辑:许多人对变量名发表了评论,所以我修改了示例代码,以免在优先选择其他变量时使它成为一个因素。我试图在第一个示例中删除双重分配,但这只会使代码的可读性降低。
也许这不是最好的示例,因为许多人发现“花哨的”代码比较长的代码更具可读性和可理解性。这个想法是要有一个更长的代码,比一个简短但复杂的代码更容易理解。
EDIT2:这是我从SO获得的一个新例子:
评论版本:
//direct formula for xoring all numbers from 1 to N
int Sum = (N & (N % 2 ? 0 : ~0) | ( ((N & 2)>>1) ^ (N & 1) ) );
非注释长版:
int Sum = 0;
for (int i = 1; i < N; ++i)
{
Sum ^= i; //or Sum = Sum ^ i;
}