2

我喜欢让我的代码尽可能简洁,但也许这不可读?

var filters = {};
function addFilter(type, name) {
  filters[type] && filters[type].push(name) || ( filters[type] = [name] );
}

甚至(如答案中所指出的):

var filters = {};
function addFilter(type, name) {
  filters[type] ? filters[type].push(name) : ( filters[type] = [name] );
}

-编辑 -

不是不可读,但可能是糟糕的风格?另一种方法是写出

var filters = {};
function addFilter(type, name) {
  if (!filters[type]) {
    filters[type]= [];
  }
  filters[type].push(name);
}
4

6 回答 6

9

语言有成语和模式是有充分理由的。特别是,Javascript 具有专门为此目的设计的if/语句。else代码应该写得容易阅读,因为在未来,它的阅读频率将远远超过它的编写频率。

我不会在代码审查中接受上述“简洁”的代码。

于 2013-08-04T23:36:15.810 回答
2

您至少可以使用三元:

filters[type] ? filters[type].push(name) : ( filters[type] = [name] );

或者,您可以使用代码的扩展版本,但更简洁一点:

if ( ! filters[type] ) filters[type] = [];

filters[type].push(name);

这会导致在首次创建数组时运行两条语句,但我发现这种方式更具可读性。

于 2013-08-04T23:36:47.447 回答
0

我会说不必要的不​​可读。这也取决于你在做什么以及你为谁工作。如果您确定您是唯一将支持此应用程序的人,那么也许这会很好。

于 2013-08-04T23:36:43.720 回答
0

可读但也具有误导性。我对 addFilter 函数的期望是添加一些过滤器,或者如果存在这样的过滤器,我应该得到异常或 false 或 -1(告诉我它重复的东西)

于 2013-08-04T23:36:53.763 回答
0

你错过了一个;之后var filters = {},而且,第二种形式更好,因为新编码人员更容易立即理解它(或将来你自己)。您可以使用您的第一个表单并对其进行注释,但正如 Sammy Larbi 在Common Excuses Used To Comment Code中所说的那样,如果您觉得您的代码太复杂而无法在没有注释的情况下理解,那么您的代码可能很糟糕

于 2013-08-04T23:39:46.357 回答
0

使用 && 和 || 对于更熟悉三元组的 Javascript 人来说,可能会有些困惑。

function addFilter(type,name) {
    filters[type] ? filters[type].push(name) : filters[type] = [name];
}
于 2013-08-04T23:41:28.617 回答