3

所以我不会在这里追求可维护性或优雅性.. 寻找一种方法来减少总令牌的数量,只是为了好玩。该方法由一个长嵌套的 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;

以令牌方式执行此操作的最便宜的方法是什么?我现在做的很丑但是不会浪费太多的令牌(这里的字段是一个字符串):

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

同样,重点不是好的编码,我只是在寻找减少令牌数量的技巧。如果有更短的方法来写整个事情,我也愿意接受。感谢您的任何建议。

编辑:每个单词和标点符号都算作一个标记。因此,例如,“instanceOf String”是两个标记,但“!= null”是三个。我可以看到的可能改进的主要内容是“&&”和括号。除了条件之外,有没有办法将“field = value”放在某个地方,如果没有,是否有一个结构可以使“field = value”成为布尔值而不需要括号?

4

2 回答 2

2

如果 param 为 null,则返回 0
然后对参数进行 case/switch/select 语句。那很干净

于 2010-02-08T18:35:22.010 回答
2
(field = value) instanceof String

假设它已经满足您的需求(因此它包括在valueis时返回 false null),那么较短的替代方案将是

(field = value) != null

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

(field = value) == value

如果您使用 1 个字母的变量名,这可以缩短很多。

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

于 2010-02-08T18:39:34.023 回答