所以我不打算在这里寻求可维护性或优雅.. 寻找一种方法来减少方法中的 token 总数,只是为了好玩。该方法由一个长嵌套的 if-else 结构组成,我发现(我认为)用最少的标记来实现它的方法是三元运算符。本质上,我翻译这个:
String method(param) {
if (param == null)
return error0;
else if (param.equals(foo1))
if (condition)
return bar1;
else
return error1;
else if (param.equals(foo2))
if (condition)
return bar2;
else
return error1;
...
else
return error;
}
为此:
String method(param) {
return
param == null ?
error0 :
param.equals(foo1) ?
condition ?
bar1 :
error1 :
param.equals(foo2) ?
condition ?
bar2 :
error2 :
...
error
}
但是,在某些情况下,除了返回一个值外,我还想更改一个字段或调用一个方法;例如,
else if (param.equals(foo3))
if (condition) {
field = value;
return bar3;
}
else
return error3;
以 token 方式执行此操作的成本最低的方法是什么?我现在做的是丑陋的但不会浪费太多 token (这里的字段是一个字符串):
param.equals(foo3) && (field = value) instanceOf String ?
condition ?
bar2 :
error2 :
同样,重点不是好的编码,我只是在寻找技巧来减少 token 数。如果有更短的方式来编写整个内容,我也愿意接受。感谢您的任何建议。
编辑:每个单词和标点符号算作一个标记。因此,例如,“instanceOf String”是两个标记,而“!= null”是三个。我能看到的可能改进的主要内容是“&&”和括号。有没有办法将“field = value”放在条件之外的某个地方,如果没有,是否有一种结构可以使“field = value”成为 boolean 值而不需要括号?
最佳答案
(field = value) instanceof String
假设它已经满足您的需求(因此它包括在 value
为 null
时返回 false),那么一个更短的替代方案就是
(field = value) != null
或者,如果您实际上忽略了这一点,并且想让 null
也返回 true
,那么使用
(field = value) == value
如果您使用 1 个字母的变量名,这可以变得更短。
此外,我看不到其他方式,我同意我们大多数人的看法,这一切都有些令人讨厌;)
关于java三元hack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2223910/