Pergunta

Então, eu não estou indo para a manutenção ou elegância aqui .. procurando uma maneira de reduzir o total de fichas em um método apenas por diversão. O método é composto de uma construção if-else longo aninhados e eu descobri que (eu acho) a maneira de fazê-lo com os símbolos menor número é o operador ternário. Essencialmente, eu traduzir isso:

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 esta:

String method(param) {

    return 

        param == null ?
            error0 :

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

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

        ...

        error

    }

No entanto, existem casos casal onde, além de retornar um valor Eu também quero mudar um campo ou chamar um método; por exemplo.,

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

Qual seria a forma mais barata de fazer isso token-sábio? O que estou fazendo agora é feio, mas não desperdiça muitas fichas (aqui o campo é uma String):

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

Mais uma vez, o ponto não é bom codificação, estou apenas à procura de hacks para diminuir a contagem de token. Se há um caminho mais curto para escrever a coisa toda Estou aberto a isso também. Obrigado por todas as sugestões.

Edit: Cada palavra e conta sinal de pontuação como um token. Assim, por exemplo, "instanceof String" é duas fichas, mas "! = Null" é três. As principais coisas que eu posso ver para possível melhoria são os "&&" e os parênteses. não há uma maneira de colocar "field = value" em algum lugar além da condicional, e se não é uma construção que faz "field = value" um booleano sem a necessidade de parênteses?

Foi útil?

Solução

(field = value) instanceof String

Assumindo que já satisfaz suas necessidades (e inclui, portanto, falsa retornar quando value é null), uma alternativa mais curta, então, ter sido

(field = value) != null

Ou se você realmente esquecido que e quer fazer null retorno true, bem como, em seguida, usar

(field = value) == value

Isto pode ser feito muito mais curto, se você usar nomes de variáveis ??1-letra.

Além disso, não vejo outras maneiras e eu concordo com a maioria de nós que tudo isso é um pouco desagradável;)

Outras dicas

Se param é nulo, retorno 0
Então faça um / switch / instrução Select Case no parâmetro. Isso é limpa .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top