Não Complica Minha Vida
A maior parte do sistema que estamos “evoluindo” foi escrita em C muitos anos atrás. O core não foi reescrito; apenas inchou. A interface gráfica foi refeita em Java/Swing, mas as integrações continuam presas aos grilhões do legado C e dos muitos scripts que deixam o software chumbado na plataforma em que executa.
Durante a manutenção de uma parte do sistema, vi um código mais ou menos assim (alteramos os nomes para não comprometer os culpados):
(...)
for(int i; i < widgets.length; i++)
lstWidgets.get(i).setStatus(widgets[i] == 1);
(...)
Os nomes das variáveis e outras coisas que vi estavam bem pouco inteligíveis. Falei um pouco sobre o tipo de trabalho que ando fazendo aqui.
Pensando em clareza, esse pedacinho singelo de código chega a ser pavoroso. Como não entendi a intenção do método, fui conversar com o pessoal do C. Me explicaram que eram enviados 4 bytes onde cada bit representava o estado de um “widget”: “1″ para ativado e “0″ para desativado. Eles argumentaram que poderiam enviar até 32 “widgets” mantendo essa estrutura. Uma solução típica de quem vive no e do passado.
Com as informações que colhi, fiz uma pequena alteração para que outras pessoas entendam o significado de “0″ e “1″ no contexto dos “widgets”:
private boolean isActivated(int widgetStatusIndex){
return widgets[widgetStatusIndex] == 1; // 1 para ativado e 0 para desativado
}
Também melhorei um pouco e adicionei um comentário explicativo ao parser do “array de bits”. Poderia ter utilizado um tipo enumerado para dar mais significado aos números cabalísticos “0″ e “1″, mas achei que seria preciosismo. Como estamos finalizando uma fase do projeto, é o que dá pra fazer. Refactorings e, se possível, redefinição das interfaces, ficam para a próxima fase.