在使用逻辑AND运算符return
的箭头函数中使用隐式&&
语句有副作用吗?
这可能包括捆绑程序或优化程序删除代码的问题
示例:
// With return
const tap = fn => val => {
fn(val);
return val;
};
// Without explicit return
const tap = fn => val => fn(val) && val;
// In case fn(val) returns a falsy value
const tap = fn => val => (fn(val) || true) && val;
// Comma sequence (added from accepted answer)
const tap = fn => val => (fn(val), val);
答案 0 :(得分:5)
在使用逻辑AND运算符&&的箭头函数中使用隐式return语句是否有任何副作用(不利影响)?
是的,有几个:
您在问题中提出的维护隐患:如果fn(val)
返回虚假值,则那个值而不是val
将成为箭头功能返回。编辑fn
逻辑的人不太可能会意识到其他地方的代码假定它总是返回真实值。
另一个维护隐患是,如果必须分开&&
表达式,则向箭头函数添加另一个调用或其他逻辑会更加复杂。
从主观上讲,这类事情可能更难阅读,特别是因为&&
的意义不仅仅在于避免编写return
。
您可以使用comma operator(或有些人会说 ab 使用)来寻址#1:
const tap = fn => val => (fn(val), val);
我不建议,只是指出这是一个选择。逗号运算符评估其左操作数,丢弃该结果,评估其右操作数,并将该结果作为结果。当使用逗号表达式作为箭头简洁主体时,您需要在表达式周围加上()
,因为否则简洁主体将以逗号结尾。这意味着您要保存的唯一输入是单词return
。
这可能包括捆绑程序或优化程序删除代码的问题
仅当这些捆绑器或优化器中存在错误时。他们的工作是正确理解代码。简洁的箭身不在此职权范围内。
但是谈到工具:一般来说,我建议尽可能清晰地编写代码。尽可能将简化程序的过程留给简化程序。