我的值不能低于设定值或高于其他设定值。我已经写了一个方法来处理这个问题。我告诉你两个版本的这个相同的方法略有不同。一个包含多个if
语句,另一个包含else if
树。两者都返回相同的结果。 但是出于某种原因,一个人比其他人好吗?或者(开玩笑)还有第三种更好的方法吗?
double Constrain(double low, double value, double high)
{
if (value < low)
return low;
else if (value > high)
return high;
else
return value;
}
double Constrain(double low, double value, double high)
{
if (value < low)
return low;
if (value > high)
return high;
return value;
}
答案 0 :(得分:3)
一个更好吗?性能似乎不是问题,因此问题变得哪个更具可读性和可维护性?如果您使用ReSharper,它会将第一个标记为具有不必要的else
s。如果您不使用ReSharper,那么应该归结为您和您的团队最容易理解的问题。
我原本打算建议使用max(min(输入,高),低)。我决定不这样做,因为更难理解(imo)。
答案 1 :(得分:1)
不是您的问题的答案,但由于我们在答案中有一个很好的对话,我会将此版本添加为更通用的代码段:
public static T Constrain <T>(this T val, T low, T high) where T : IComparable<T>
{
if (val.CompareTo(low) < 0) return low;
if (val.CompareTo(high) > 0) return high;
return val;
}
答案 2 :(得分:0)
这几乎是一样的。如果值介于低值和高值之间,那么它将必须在两种方式上执行两次检查和return语句。如果该值高于高值,则两者都必须进行两次检查(首先是低检查)然后是return语句。如果该值低于低值,则两者都必须执行一次检查和返回语句。
答案 3 :(得分:0)
好吧,也许不是滑稽的。我就是这样做的
function constrain (low, value, high) {
return (value<low? low:
value>high? high:
value);
}
答案 4 :(得分:-1)
我的值不能低于设定值或高于其他设定值。
所以这意味着程序员只要在使用这个值时就可以调用Constrain
- 这听起来像是一个容易犯的简单错误。
如果你有它的范围,你可以接近这是一种更面向对象的方式,并创建一个钳制双值的类。这样你就可以随意使用它,它永远不会超过极限。