将条件链重写为一行序列

And*_*Dev -10 java conditional

我在Java中有这个代码来控制机器人的主臂:

if (gamepad1.left_stick_y > 50)
{
    mainArm.setDirection(DIRECTION_FORWARD);
    mainArm.setPower(50);
}
else if (gamepad1.left_stick_y < -50)
{
    mainArm.setDirection(DIRECTION_REVERSE);
    mainArm.setPower(50);
}
Run Code Online (Sandbox Code Playgroud)

这只是一小部分,但是有很多条件就是这样,如果条件为真,有些只有一个陈述.它可以简化为:[伪代码.不要从字面上理解.我知道它不会起作用]

if (gamepad1.left_stick_y > 50) mainArm.setDirection(DIRECTION_FORWARD), mainArm.setPower(50);
else if (gamepad1.left_stick_y < -50) mainArm.setDirection(DIRECTION_REVERSE), mainArm.setPower(50);
Run Code Online (Sandbox Code Playgroud)

不幸的是,用于直接与硬件接口以设置电源的库是闭源的,因此修改它们是不可能的.

ACV*_*ACV 5

你提出的优化是一个糟糕的.它比原来更糟糕.代码变得不易读,更容易出错.如果存在多个这样的条件,可以考虑通过以更多OOP方式重新设计逻辑或通过定义将从switch语句调用的方法来进行重构......

  • 而且只是为了它:如果/ else/if cascades,switch语句只比miny"更好".他们首先看起来"组织得更好"; 但他们是错误的答案. (2认同)

das*_*ght 5

此代码无法编译:

if (gamepad1.left_stick_y>50) mainArm.setDirection(DIRECTION_FORWARD), mainArm.setPower(50);
//                                                                   ^
Run Code Online (Sandbox Code Playgroud)

您尝试通过放置逗号将多个操作转换为一个操作将无效:

JLS 15.27:与C和C++不同,Java编程语言没有逗号运算符.

一种方法是允许在一次通话中改变功率和方向:

if (gamepad1.left_stick_y > 50) mainArm.setDirectionAndPower(DIRECTION_FORWARD, 50);
Run Code Online (Sandbox Code Playgroud)

用于设置电源的库是闭源的

如果您无法修改库,则可以使用自己的帮助方法来解决此缺点:

private static void setDirectionAndPower(Arm arm, Direction dir, int pow) {
    arm.setDirection(dir);
    arm.setPower(pow);
}
Run Code Online (Sandbox Code Playgroud)