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?
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 .