留下if / else空白的公约
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了留下if / else空白的公约相关的知识,希望对你有一定的参考价值。
放弃
我不完全确定这是否适合这个SE,但无论如何我都会从这里开始。
背景
我之前正在阅读this question,正在查看one of the answers中的这段代码片段
auto z = [&](){ static auto cache_x = x;
static auto cache_y = y;
static auto cache_result = x + y;
if (x == cache_x && y == cache_y)
return cache_result;
else
{
cache_x = x;
cache_y = y;
cache_result = x + y;
return cache_result;
}
};
就个人而言,我倾向于用一个return语句重写如下
auto z = [&](){ static auto cache_x = x;
static auto cache_y = y;
static auto cache_result = x + y;
if (x == cache_x && y == cache_y)
{
}
else
{
cache_x = x;
cache_y = y;
cache_result = x + y;
}
return cache_result;
};
但这为if
部分留下了空白的身体。
我们可以将if/else
重写为if(!(x == cache_x && y == cache_y))
,但这会冒被误解(并且可能变得混乱)的风险。
我的问题
如果我们这样写什么是更可接受的方式
- 有多个return语句
- 留下
if
的身体空白 - 将
if
条件重写为否定版本 - 别的
请注意,我通常用Java编写代码,而示例代码用C ++编写。我对普遍接受的做事方式感兴趣,而不是特定的C ++构造/方法。
答案
我倾向于用一个返回语句重写它[...]
这也是我的偏好。你可以通过扭转分支的条件来更清楚地到达那里:
auto z = [&](){
static auto cache_x = x;
static auto cache_y = y;
static auto cache_result = x + y;
if (!(x == cache_x && y == cache_y)) {
cache_x = x;
cache_y = y;
cache_result = x + y;
}
return cache_result;
};
一般来说,如果有一个分支逻辑(在这种情况下,if ... else ...
),其中一个分支为空,请尝试重写它而不使用那个空分支。
以上是关于留下if / else空白的公约的主要内容,如果未能解决你的问题,请参考以下文章
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段