所以我不打算对可维护性或优雅在这里..寻找一种方式,只是为了好玩的方法,以减少总的令牌上。该方法是由长嵌套的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

    }

但是,也有一对夫妇的情况下,除了返回一个值I也想改变字段或呼叫的方法;如,

    else if (param.equals(foo3))
        if (condition) {
            field = value;
            return bar3;
        }
        else
            return error3;

什么是做这个令牌明智最便宜的方式?我现在正在做的是丑陋的,但不会浪费太多令牌(这里的字段是一个字符串):

        param.equals(foo3) && (field = value) instanceOf String ?
            condition ?
                bar2 :
                error2 :

再次点不好的编码,我只是在寻找黑客以减少令牌计数。如果有写了整个事情更短的方式我接受这一点。感谢您的任何建议。

编辑:每个字和标点计为一个令牌。因此,例如,“}这种串”是两个符号,但“!= NULL”是三。主要的事情,我可以看到可能的改进是“&&”和括号。有没有把“域=价值”的地方除了有条件的一种方式,如果不是有一种构造,使“域=价值”,而不需要括号?

一个布尔
有帮助吗?

解决方案

(field = value) instanceof String

假设它已经满足需要(并因此包括返回时valuenull假),较短的替代便被

(field = value) != null

或者如果你真的忽略了,并希望使null回报true为好,然后用

(field = value) == value

如果使用1字母的变量名这可以制成短得多。

另外我没有看到其他的方式,我与我们大多数人都认为这一切是有点讨厌;)

其他提示

如果param为空,返回0,点击 然后,让的情况下,/开关/选择的参数声明。这是洁净的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top