在分配情况下,情况很简单
result = testCondition ? value1 : value2;
但是,如果我想使用它而不是if语句怎么办? 例如在日志记录情况下:
logger.shouldDebbug ? logger.log("logging") : (what to do if not?);
在错误的情况下我什么都不要做,我仍然可以使用此运算符吗?
答案 0 :(得分:3)
是的,可以将它们包装在返回函数中,但是不可以。
在您的记录器示例中,使记录器输出无效,在未启用调试的情况下放弃输入。
您不想将所有这些日志检查都弄混。 至少进行检查,并尽可能地集中检查。
要么在logger.log函数中进行检查(如果启用了调试功能),要么将记录器替换为除了接受输入之外不执行任何操作的虚拟模拟,然后立即将其丢弃。
如果您使用log4j之类的标准日志记录框架,则可以设置调试级别,在其中仅显示信息或更严重的信息,仅警告或更严重的信息,错误或更严重的信息。
其他“快速”检查也是如此。如果您发现自己经常使用某种模式,请在需要时使用静态方法为其编写实用程序类,这样您就可以在一个地方进行更改,而不必在执行操作时更新200个代码点投入生产。
答案 1 :(得分:0)
如果您坚持认为,可以通过定义无意义的变量并利用函数的side-effects来使用它,但这不是一个很好的编码习惯。 这纯粹是一种解决方法。
例如:
public static boolean test() {
return 1>0;
}
public static int success() {
System.out.println("true");
return 0; // has no meaning whatsoever
}
public static int fail() {
System.out.println("false");
return 0; // has no meaning whatsoever
}
public static void main(String[] args) {
int meaningless = test() ? success() : fail();
}
答案 2 :(得分:0)
所有内容均已在注释中说明,因此我只在此处提出一些想法:
public class Ternary {
private final boolean condition;
private Ternary(boolean condition) { this.condition = condition; }
public static Ternary of(boolean condition) { return new Ternary(condition); }
public Ternary onTrue(Runnable r) { if (condition) { r.run(); } return this; }
public Ternary onFalse(Runnable r) { if (!condition) { r.run(); } return this; }
}
用法示例:
Ternary.of(o != null).onTrue(() -> doSomething()).onFalse(() -> doSomethingElse());
但是更简单的是写:
if (o != null) { doSomething(); } else { doSomethingElse(); }