Convenções acordadas entre os membros do time de desenvolvimento tornam o código-fonte mais consistente e, por conseqüência, mais legível e manutenível. Estas regras e padrões podem ser informais ou documentadas, contanto que seja resultado de experiências reais e acumulativas.
Parêntesis: Não acredito que um documento de trocentas páginas de padrão de codificação, escrito antes mesmo de o projeto começar, por alguém que não mete a mão em código-fonte há anos, tenha utilidade. Comece com um documento mínimo e deixe-o evoluir naturalmente, com a necessidade do projeto. Um wiki pode ser uma boa solução.
Nosso time estava fazendo algumas revisões no código-fonte e surgiu uma discussão sobre como organizar statements if-else e if-elseif. Vou apresentar um exemplo semelhante, mas simplificado do caso discutido. Tenho a seguinte regra para calcular o IPVA de um carro: Qualquer carro fabricado antes de 1970, paga 10%, carros fabricados após este ano (inclusive) pagam 15%, com exceção dos utilitários, que pagam 20%.
É possível resolver o problema desta forma (Solução 1):
Ou desta forma (Solução 2):
A discussão era qual formato é mais legível? Qual deles consegue passar mais facilmente para o leitor o qual é a regra de negócio aplicada?
A primeira solução tem menos endentações, o que facilita a leitura, é possível ver claramente, no mesmo nível de endentação, qual o valor final do Ipva. Por outro lado a outra solução exprime melhor a lógica da regra de negócio: “se o carro foi fabricado antes de 1970, faça isto, senão...”. O Senão é outra discussão, porque é relacionado com outra propriedade do carro que não sua data de fabricação.
Nossa decisão final foi a seguinte: Só utilizaríamos um statement if-else if caso as condições do dois estivessem no mesmo domínio, caso contrário usaríamos dois statements if-else, um aninhado no outro (solução 2 no exemplo).
E você? Qual seria sua solução? Ou você acha esta discussão idiota e desnecessária?