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 :

繰り返しになりますが、要点は適切なコーディングではありません。トークン数を減らすためのハックを探しています。全体を書くためのより短い方法があれば、私もそれを受け入れます。提案をありがとう。

編集:各単語と句読点は1つのトークンとしてカウントされます。したがって、たとえば、「instanceOf String」は2つのトークンですが、「!=null」は3つです。改善の可能性について私が見ることができる主なものは、「&&」と括弧です。条件以外の場所に「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 に答える