java三元hack

标签 java ternary-operator

所以我不打算在这里寻求可维护性或优雅.. 寻找一种方法来减少方法中的 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

假设它已经满足您的需求(因此它包括在 valuenull 时返回 false),那么一个更短的替代方案就是

(field = value) != null

或者,如果您实际上忽略了这一点,并且想让 null 也返回 true,那么使用

(field = value) == value

如果您使用 1 个字母的变量名,这可以变得更短。

此外,我看不到其他方式,我同意我们大多数人的看法,这一切都有些令人讨厌;)

关于java三元hack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2223910/

相关文章:

ternary-operator - 记住三元运算符语法

java - 如何控制 Activity 的宽度或可见性

java - Google play 的多个 sha1 key

java - 分布式 session 对发展的影响

java - 动态调用接口(interface)方法

javascript - 如何在映射时跳过 null? JSX

java - 使用 ab 进行测试时,套接字服务器挂起,等待 BufferedReader.readline()

php - javascript 和 PHP 上的三元运算符,不同的输出

javascript - 计算 bool 值数组中真实成员的数量

C 条件运算符 ('?' ) 第二个参数为空