Pregunta

Así que no voy para el mantenimiento o la elegancia .. aquí buscando una manera de reducir las fichas totales en un método sólo por diversión. El método se compone de una larga anidado construcción if-else y he descubierto que (creo) la manera de hacerlo con el menor número de las fichas es el operador ternario. Esencialmente, traduzco esto:

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;

}

a esto:

String method(param) {

    return 

        param == null ?
            error0 :

        param.equals(foo1) ?
            condition ?
                bar1 :
                error1 :

        param.equals(foo2) ?
            condition ?
                bar2 :
                error2 :

        ...

        error

    }

Sin embargo, hay un par de casos en los que además de devolver un valor que también quiere cambiar un campo o llamar a un método; por ejemplo.,

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

¿Cuál sería la forma más barata de hacer esto token-sabia? Lo que estoy haciendo ahora es feo, pero no pierde demasiadas fichas (en este caso el campo es una cadena):

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

Una vez más, el punto no es una buena codificación, sólo estoy en busca de trucos para disminuir el recuento de fichas. Si hay un camino más corto para escribir toda la cosa estoy abierto a eso también. Gracias por cualquier sugerencia.

Editar: Cada marca denominativa y puntuacion cuenta como un token. Así, por ejemplo, "instanceOf String" es dos fichas, pero "! = Null" es tres. Las principales cosas que puedo ver para una posible mejora son el "&&" y los paréntesis. ¿Hay una manera de poner "campo = valor" en otro lugar que el condicional, y si no hay una construcción que hace "campo = valor" un valor lógico sin necesidad de paréntesis?

¿Fue útil?

Solución

(field = value) instanceof String

Si se asume que ya satisface sus necesidades (y por lo tanto se incluye la vuelta falsa cuando value es null), una alternativa más corta que habría sido

(field = value) != null

O si en realidad se pasa por alto que y quiere hacer null retorno true así, a continuación, utilizar

(field = value) == value

Esto puede hacerse mucho más corto si utiliza nombres de variables 1-carta.

Además, no veo otras maneras y estoy de acuerdo con la mayoría de nosotros que todo esto es algo desagradable;)

Otros consejos

Si parámetro es nulo, devolver 0
A continuación, hacer un caso / interruptor / instrucción de selección del parámetro. Eso es limpia .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top