【发布时间】:2013-02-28 20:18:42
【问题描述】:
依赖短路评估是否会使代码变得脆弱? 我写了一段代码,基本上如下所示。我的教授要我重写它。
(注意:我确信这四个条件中只有一个为真,因为给定任何流,只有一个“下一个令牌”,对吧?)
foo getFoo()
{
Bar bar;
if ((bar = peekAndGet('x')) != null
|| (bar = peekAndGet('y')) != null
|| (bar = peekAndGet('z')) != null
|| (bar = peekAndGet('t')) != null)
return produce(bar);
else
return null;
}
这真的很脆弱吗?我发现它工作得很好。但是我应该如何重写呢?
【问题讨论】:
-
如果它按预期工作、处理边界情况、易于理解并且易于扩展,那么它就是好代码。 “良好实践”将帮助您实现目标,但重要的是我列出的标准。
-
能提供peekAndGet方法吗?
-
我认为在同一行中进行分配和比较是很恶心的......但这只是我(和很多其他人)。
-
@jahroy 这也是... 从流中读取时使用的构造。我也喜欢 C# 的
return _foo ?? (_foo = InitFoo());惰性初始化构造。 (虽然这是因为缺少?=操作员。) -
@millimoose - 你是说它是正确的结构还是最流行的结构?我一直认为这是使用 Java 的一次性 C 程序员使用的东西。
标签: java short-circuiting