Is there something more obviously bad or devious with such an approach?
Sim, claro. É desnecessário, inesperado, inútil, deselegante. Viola os conceitos modernos de design de classes (coesão, acoplamento). Ele quebra o contrato do método (um construtor tem um trabalho definido e não é apenas um método aleatório). Certamente não é bem sustentável, futuros programadores vão gastar muito tempo tentando entender o que está acontecendo, e tentando adivinhar as razões pelas quais isso foi feito dessa maneira.
Nada disso é um "bug" no sentido de que seu código não funciona. Mas, provavelmente, incorrerá em custos secundários enormes (em relação ao custo de escrever o código inicialmente) a longo prazo, tornando o código mais difícil de manter (ou seja, difícil de adicionar testes, difícil de reutilizar, difícil de depurar, difícil de estender etc. .).
Muitos / os aprimoramentos mais modernos nos métodos de desenvolvimento de software são feitos especificamente para facilitar o processo real de escrever / testar / depurar / manter o software. Tudo isso é contornado por coisas como essa, em que o código é colocado aleatoriamente porque "funciona".
Infelizmente, você encontrará regularmente programadores que são completamente ignorantes de tudo isso. Isso funciona, é isso.
Para terminar com uma analogia (outra linguagem de programação, aqui o problema em questão é calcular 2+2
):
$sum_a = 'bash -c "echo $((2+2)) 2>/dev/null"'; # calculate
chomp $sum_a; # remove trailing \n
$sum_a = $sum_a + 0; # force it to be a number in case some non-digit characters managed to sneak in
$sum_b = 2+2;
O que há de errado com a primeira abordagem? Retorna 4 depois de um tempo razoavelmente curto; isso está correto. As objeções (juntamente com todas as razões usuais que um desenvolvedor pode dar para refutá-las) são:
- Mais difícil de ler (mas, ei, um bom programador pode lê-lo com facilidade, e sempre fizemos assim: se você quiser, posso refatorá-lo em um método!)
- Mais lento (mas isso não está em um momento crítico de tempo, então podemos ignorar isso e, além disso, é melhor otimizá-lo somente quando necessário!)
- Usa muito mais recursos (um novo processo, mais memória RAM etc. - mas dito, nosso servidor é mais do que rápido o suficiente)
- Introduz dependências em
bash
(mas nunca será executado no Windows, Mac ou Android)
- E todas as outras razões mencionadas acima.