【发布时间】:2022-01-14 06:28:24
【问题描述】:
我正在尝试处理几个选项来以最干净的方式填充变量内容。
最简单的情况是:
const value = foo.bar || 'Default';
当我想添加条件时,我通常喜欢:
const value = foo.bar || (n > 10 ? n : 'Default');
可以重构为:
const value = foo.bar || (n > 10 && n) || 'Default';
我的疑问是当有几个阶段时,是否可以通过这种方式复制或使用经典条件来解决
选项 A(逻辑运算符)
const value = foo.bar
|| (n > 10 && n)
|| (n > 0 && 0)
|| 'Default';
选项 B(带三元条件)
const value = foo.bar
|| (n > 10 && n)
|| (n > 0 ? 0 : 'Default');
选项 C(经典条件)
let value;
if(foo.bar) {
value = foo.bar;
} else if(n > 10) {
value = n;
} else if(n > 0) {
value = 0;
} else {
value = 'Default';
}
【问题讨论】:
-
您是否尝试过复制它并查看它的反应?
-
你忘了开关/机箱,顺便问一下问题是什么?)
-
问题是什么是最干净的方式,如果我选择的选项 A 是否是干净代码的好习惯。
-
我不会说 any 这些是“最干净”的方式。 Maybe/Optional 或可能是 Either 将是使用 FP 处理此问题的更好方法。甚至可能是
condfrom Ramda。所有链式复杂操作都难以维护和推理。 -
这样做的目的是避免使用
let,选项C是什么,具有可读的解决方案并且不使用第三个库。 Switch/case 不是一个选项,因为它不适用于复杂的条件。
标签: javascript node.js logical-operators