如何重构这个 ifs 瀑布,使其更干净、更高效?
How to refactor this waterfall of ifs to be more clean and efficient?
我在编写代码时正在研究我的缺陷:我从不使用任何语言编写干净的程序。
那么,有什么建议可以“优雅”地重写这段代码吗?因为我不喜欢这种如果的瀑布...
public float RoundAngle(float angle)
{
if(angle < 45 && angle >= -45){
return 0
}
if(angle < 135 && angle >= 45){
return 90
}
if(angle < 315 && angle >= 225)
{
return 270
}
}
您可以使用 switch expression with some C# 9 patterns:
public float RoundAngle(float angle)
{
return angle switch
{
<45 and >=-45 => 0,
<135 and >=45 => 90,
<315 and >=225 => 270,
_ => SomeDefaultValue,
};
}
好吧,你根本不需要 ifs:
var normalizedAngle = 90 * (int)((angle + 405) / 90) % 360;
也就是说,ifs 可能更容易理解
除非你有一个非常复杂的嵌套 if 结构,难以阅读和遵循,根本不是你的情况,否则你的代码实际上没有任何问题。恕我直言,我认为它比单线选项更容易理解。
我在编写代码时正在研究我的缺陷:我从不使用任何语言编写干净的程序。
那么,有什么建议可以“优雅”地重写这段代码吗?因为我不喜欢这种如果的瀑布...
public float RoundAngle(float angle)
{
if(angle < 45 && angle >= -45){
return 0
}
if(angle < 135 && angle >= 45){
return 90
}
if(angle < 315 && angle >= 225)
{
return 270
}
}
您可以使用 switch expression with some C# 9 patterns:
public float RoundAngle(float angle)
{
return angle switch
{
<45 and >=-45 => 0,
<135 and >=45 => 90,
<315 and >=225 => 270,
_ => SomeDefaultValue,
};
}
好吧,你根本不需要 ifs:
var normalizedAngle = 90 * (int)((angle + 405) / 90) % 360;
也就是说,ifs 可能更容易理解
除非你有一个非常复杂的嵌套 if 结构,难以阅读和遵循,根本不是你的情况,否则你的代码实际上没有任何问题。恕我直言,我认为它比单线选项更容易理解。