我正在学习 AngularJS,试图制作一个简单的计算器,并且我正在尝试压缩它if/else if 陈述使用 Javascript 逻辑运算符 (&&
, ||
, !
)
鉴于这个例子,我怎样才能减少它呢?
(如果你不明白$scope
, 忽略它。它基本上是一个视图。因此,当有人点击 9 时,计算器将在答案屏幕上显示 9)
$scope.setOperand = function (operandEntered) {
if ($scope.leftOperand === null) {
$scope.leftOperand = operandEntered;
}
else if ($scope.operator === null) {
$scope.leftOperand = $scope.leftOperand + operandEntered;
}
else if ($scope.rightOperand === null) {
$scope.rightOperand = operandEntered;
}
else if ($scope.answer === null) {
$scope.rightOperand = $scope.rightOperand + operandEntered;
}
};
人们总是可以(尝试)变得聪明,但是当代码变得更长并且不更可重用时,抽象并不总是有回报。KISS https://en.wikipedia.org/wiki/KISS_principle.
但如果你想这么做的话我会选择
function addTo(property, x, operand) { // "x" for lack of a more meaningful name
const shouldAdd = $scope[property] === null || $scope[x] === null;
if (shouldAdd)
$scope[property] += operand; // assuming "operand" is a number
// or $scope[property] = ($scope[property] || "") + operand; // when it's a string
return shouldAdd;
}
$scope.setOperand = function (operandEntered) {
addTo("leftOperand", "operator", operandEntered) || addTo("rightOperand", "answer", operandEntered);
};
如果您更关心简洁性而不是可读性,您甚至可以将助手缩短为
function addTo(property, x, operand) {
return ($scope[property] === null || $scope[x] === null) && (($scope[property] += operand), true);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)