C# 前缀减量vs减量 公共静态浮点ExpoInOut(浮点起始、浮点结束、浮点时间) { 如果((时间=0.5f)

C# 前缀减量vs减量 公共静态浮点ExpoInOut(浮点起始、浮点结束、浮点时间) { 如果((时间=0.5f),c#,math,tween,C#,Math,Tween,两种情况下的第一步都是从时间中减去1 第二种方法将该值保存回时间中,但由于不再使用该值,这并不重要吗? 第一个可以使用--time,或者第二个可以使用(time-1f),结果是一样的 如果不储蓄,第一种方法甚至可能更好 谢谢 编辑:来源:在--time上很好地使用,而不是time--。如果您没有保存时间的新值,那么从代码的角度来看,--time与time-1f之间的关系其实并不重要,但是从可读性的角度来看,您应该使用更详细的值。也就是说,您应该始终努力提高可读性(尤其是在性能影响为0或可忽略不计

两种情况下的第一步都是从时间中减去1

第二种方法将该值保存回时间中,但由于不再使用该值,这并不重要吗? 第一个可以使用--time,或者第二个可以使用(time-1f),结果是一样的

如果不储蓄,第一种方法甚至可能更好

谢谢

编辑:来源:

--time
上很好地使用,而不是
time--
。如果您没有保存时间的新值,那么从代码的角度来看,
--time
time-1f
之间的关系其实并不重要,但是从可读性的角度来看,您应该使用更详细的值。也就是说,您应该始终努力提高可读性(尤其是在性能影响为0或可忽略不计的情况下)。您可能会发现这样做更容易阅读/支持

public static float ExpoInOut(float from, float to, float time)
{
    if ((time /= .5f) < 1f)
        return Mathf.Lerp(from, to, .5f * Mathf.Pow(2f, 10f * (time - 1f)));
    return Mathf.Lerp(from, to, .5f * (-Mathf.Pow(2f, -10f * --time) + 2f));
}
公共静态浮点ExpoInOut(浮点起始、浮点结束、浮点时间)
{
时间/=0.5f;
时间--;
如果(时间<0f)
返回Mathf.Lerp(从,到,.5f*Mathf.Pow(2f,10f*时间));
返回Mathf.Lerp(从,到,.5f*(-Mathf.Pow(2f,-10f*时间)+2f));
}
我的一般经验法则是,如果你在另一个方法的参数传递部分中做数学/函数,你应该尽可能地将它最小化,即使这意味着将它分解成更小的私有方法。

很好地使用
--time
而不是
time--
。如果您没有保存时间的新值,那么从代码的角度来看,
--time
time-1f
之间的关系其实并不重要,但是从可读性的角度来看,您应该使用更详细的值。也就是说,您应该始终努力提高可读性(尤其是在性能影响为0或可忽略不计的情况下)。您可能会发现这样做更容易阅读/支持

public static float ExpoInOut(float from, float to, float time)
{
    if ((time /= .5f) < 1f)
        return Mathf.Lerp(from, to, .5f * Mathf.Pow(2f, 10f * (time - 1f)));
    return Mathf.Lerp(from, to, .5f * (-Mathf.Pow(2f, -10f * --time) + 2f));
}
公共静态浮点ExpoInOut(浮点起始、浮点结束、浮点时间)
{
时间/=0.5f;
时间--;
如果(时间<0f)
返回Mathf.Lerp(从,到,.5f*Mathf.Pow(2f,10f*时间));
返回Mathf.Lerp(从,到,.5f*(-Mathf.Pow(2f,-10f*时间)+2f));
}


我的一般经验法则是,如果您在另一个方法的参数传递部分中进行数学/函数运算,则应尽可能将其最小化,即使这意味着将其分解为更小的私有方法。

是的,它们将给出相同的结果。使用对你来说更舒适、将来更容易阅读的。(我认为这可能是
time-1
)值得检查IL-您可能会发现编译器为每个IL生成相同的代码,即使没有,抖动也可能会处理它。就我个人而言,我不喜欢表达式内部的副作用。快速阅读代码后,您可能会发现if语句中的时间值已更改。因此,我本可以避免这两种副作用&使用类似“time/=0.5f;time--;if(time<0f)return Mathf.Lerp(from,to,.5f*Mathf.Pow(2f,10f*time));return Mathf.Lerp(from,to,.5f*(-Mathf.Pow(2f,-10f*time)+2f));“这看起来有点像是一种彭纳代码‘水印’idk为什么在同一个函数中使用这两种代码呢?”,它们将给出相同的结果。使用对你来说更舒适、将来更容易阅读的。(我认为这可能是
time-1
)值得检查IL-您可能会发现编译器为每个IL生成相同的代码,即使没有,抖动也可能会处理它。就我个人而言,我不喜欢表达式内部的副作用。快速阅读代码后,您可能会发现if语句中的时间值已更改。所以我本可以避免这两种副作用&使用类似于“time/=0.5f;time--;if(time<0f)return Mathf.Lerp(from,to,.5f*Mathf.Pow(2f,10f*time));return Mathf.Lerp(from,to,.5f*(-Mathf.Pow(2f,-10f*time)+2f));”这看起来有点像一个penner代码“水印”idk为什么在同一个函数中同时使用这两种代码我想你已经证明了我关于表达式中的副作用的观点。时间需要除以0.5才能减去1@如果你是100%对的。让我来解决这个问题,这是个坏例子,不是吗?你还改变了第二个Mathf.Pow的括号。@PaulF,我想我已经把它分类了。添加了第二个示例,这可能有助于防止在执行第一个示例时发生的情况。在太少的空间里发生太多的事情。这似乎比我在评论中输入的代码要复杂得多-如果你纠正了你的第一个例子,我认为它会比你的第二个例子更好。一个改进可能是将if语句改为if/else语句来计算第三个参数&只需一个return语句(我知道有些人只喜欢函数的一个return)我想你已经证明了我关于表达式副作用的观点。时间需要除以0.5才能减去1@如果你是100%对的。让我来解决这个问题,这是个坏例子,不是吗?你还改变了第二个Mathf.Pow的括号。@PaulF,我想我已经把它分类了。添加了第二个示例,这可能有助于防止在执行第一个示例时发生的情况。在太少的空间里发生太多的事情。这似乎比我在评论中输入的代码要复杂得多-如果你纠正了你的第一个例子,我认为它会比你的第二个例子更好。一个改进可能是将if语句更改为if/else语句来计算第三个参数&只需要一个return语句(我知道有些人只喜欢函数的一个return)