有时我发现自己写的bool方法看起来像这样:
public bool isRunning()
{
if (!(move == Moving.None) && staminaRegan == true)
{
if (keyState.IsKeyDown(Keys.Space))
{
EntityAnimation.interval = 10;
return true;
}
else
{
EntityAnimation.interval = 65;
return false;
}
}
else
{
EntityAnimation.interval = 65;
return false;
}
}
(顺便说一下,这是XNA)正如你所看到的,我有一个bool isRunning,其中我做了一个if语句,我检查是否(玩家正在移动)&&(恢复耐力,一旦耐力达到低于值,则设置为假6.0f)然后我只是检查Space是否被按下,如果是,则我的动画更快(间隔越小,spritesheet更改越快),然后它发送true值,这意味着Player正在运行,否则我不是原因没有按空格 .
然后我必须在第一个if语句之外重复这个'else'代码,这样如果Player没有移动或者他的耐力Regan是假的,它会发送Player没有运行;
所以我只是想知道这种bool方法被认为是一种不好的做法(你在嵌套if中重新获得true和false值,然后在嵌套if之后返回false并重复相同的代码)?
5 回答
我认为我们为人(其他开发人员)编写代码,当然机器执行代码,但80%的开发人员的工作是阅读代码 .
基于此,我认为读取的流程必须与执行代码的流程完全相同 - 这就是为什么我认为
return
语句不是一个坏事,甚至比方法底部只有一个return语句更好 .我喜欢这种风格,我也喜欢它 . 首先,您可以更轻松地阅读代码,其次具有调试优势,因为您可以为其他个案设置断点 . 否则,您将需要使用断点条件 .
在方法中包含一个return语句是一个好习惯 . 一些人争论这个,但这是一个意见 .
通过删除不必要的代码来清除if语句也是一种很好的做法:
该方法有副作用,'s why it'是一个不好的做法:
在查看方法的签名时,我们希望只有
true
/false
答案,仅此而已 . 但是,该方法会更改实例的状态:我建议将初始方法拆分为属性和方法
您可以按如下方式重写代码;那么代码不会重复:
或者,如果您不想要冗余
else
:我会考虑在某种程度上引入一个名为boolean的自我文档,并将
staminaRegan
重命名为staminaIsRegenerating
但最重要的是,您应该重命名该方法以更准确地描述它正在做的事情: