假设您有一个函数,它接受 1D 坐标、2D 坐标或 3D 坐标作为参数。在函数调用时,如果用户想传递一些一维坐标,他们会传递简单的数字,例如:
myFunction(30, 50);
但是如果他们想传递 2D 或 3D 坐标,他们会将这些坐标作为数组/向量值传递,例如:
myFunction([30, 40], [50, 60]);
现在,在函数定义中,假设您要运行涉及传递的坐标的各种操作和方程。因为您需要处理两种不同的 arg 类型(数字与数组)中的一种,所以您可能希望针对每种数据类型对语句进行不同的格式化,因此最终可能会重复一堆语句,这是低效的。为了论证起见,假设您不能对数组 args 进行简单的向量数学运算,而是需要循环并按索引将它们分解:
function myFunction( coord1, coord2 ) {
let myVar1 = 0, myVar2 = 0, myVar3 = 0;
// if args are arrays
if ( Array.isArray( coord1 ) ) {
myVar1 = [], myVar2 = [], myVar3 = [];
for (let i = 0; i < coord1.length; i++) {
myVar1[i] = coord1[i] * coord2[i];
myVar2[i] = myVar1[i] / coord2[i] + myVar1[i];
myVar3[i] = coord1[i] * (coord2[i] / myVar2[i]);
}
// else if args are scalar
} else {
myVar1 = coord1 * coord2; // this
myVar2 = myVar1 / coord2 + myVar1; // is
myVar3 = coord1 * (coord2 / myVar2); // inefficient
}
return myVar3;
}
上面的等式是无稽之谈,但它们只是为了说明。您将如何避免在这里重复自己?我可以想到几种 DRY 方法(将标量 args 分配给单索引数组;或者将大块的方程变成混乱且难以阅读的“逻辑或”表达式(例如,myVar[i] = (coord1[i] || coord1) * (coord2[i] || coord2));或者装配一个对象数组或者什么),但我真的不喜欢其中任何一个,而且我还是个新手,所以我不知道它是什么我不知道。任何有经验的编码人员都想权衡处理这种情况的最佳实践吗?
慕神8447489
慕田峪9158850
弑天下
相关分类