gpt4 book ai didi

c# - 这种 bool 方法是一种不好的做法吗?

转载 作者:行者123 更新时间:2023-11-30 19:15:28 24 4
gpt4 key购买 nike

有时我发现自己在编写一个如下所示的 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 语句,我在其中检查 if (Player is moving) && (regains stamina,一旦达到 stamina 就设置为 false值小于 6.0f)然后我简单地检查是否按下了 Space,如果是,那么我的动画速度更快(间隔越小,spritesheet 变化越快),然后它发送真值,这意味着 Player 正在运行,否则我不是因为 Space 是没有按下。

然后我必须在第一个 if 语句之外重复这个“else”代码,以便在 Player 没有移动或他的耐力 Regan 为 false 时发送 Player 没有运行;

所以我只是想知道这种 bool 方法是否被认为是一种不好的做法(你在嵌套 if 中重新运行 true 和 false 值,然后在嵌套 if 之外返回 false 并重复相同的代码)?

最佳答案

该方法有一个副作用,这就是为什么它是一个不好的做法:

 public bool isRunning()

当查看方法的签名时,我们只希望得到 true/false 答案,仅此而已。但是,该方法更改实例的状态:

  ...
if (!(move == Moving.None) && staminaRegan == true)
{
if (keyState.IsKeyDown(Keys.Space))
{
EntityAnimation.interval = 10; // <- Aaa! The interval is changed
return true;
}
...

我建议将初始方法拆分为一个属性和一个方法

 // No side effect: just answer is running or not
public bool IsRunning {
get {
return (move != Moving.None) && staminaRegan && KeyState.IsKeyDown(Keys.Space);
}
}

// Put the right interval based on instance internal state
// (if it's running etc.)
public void AdjustInterval() {
if (IsRunning) // and may be other conditions
EntityAnimation.interval = 10; //TODO: move magic number into constant
else
EntityAnimation.interval = 65; //TODO: move magic number into constant
}

关于c# - 这种 bool 方法是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38393923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com