Eu já li muitas vezes na web que, se o seu idioma não suportar algum conceito, por exemplo, orientação a objetos ou talvez chamadas de função, e isso for considerado uma boa prática nesse outro contexto, você deve fazê-lo.
O único problema que vejo agora é que outros programadores podem achar seu código muito diferente do habitual, dificultando a programação. Que outros problemas você acha que podem surgir disso?
programming-languages
concepts
idioms
Julio Rodrigues
fonte
fonte
Respostas:
Um dos problemas é que você pode escrever muito código para expressar algo da maneira que fará em outro idioma, enquanto há um jeito mais direto no idioma usado.
Por exemplo, em uma resposta no Stack Overflow , expliquei como os contratos de código, conceito usado no .NET Framework, podem ser parcialmente emulados no PHP que não os suporta. Acabei escrevendo muito código para nada, já que a mesma coisa era possível com matrizes simples.
De maneira mais geral, cada idioma tem sua própria cultura, suas melhores práticas, seu próprio estilo.
Se eu começar a escrever código C # como se fosse C, seria feio.
Se eu apreender Haskell como um desenvolvedor Java que foi forçado a usar Haskell, mas não quer entender seus pontos fortes e apenas clonar os conceitos de Java, o código que eu escreveria sofrerá.
etc.
Não há nada errado em tentar aprimorar o idioma (por exemplo, melhorar o C # introduzindo unidades de medida como em F #), mas se você estiver fazendo isso demais, talvez deva escolher um idioma diferente que realmente atenda às suas necessidades.
fonte
A queda na legibilidade já é um problema: diminui drasticamente o número de pessoas que poderiam manter seu projeto em potencial sem um treinamento extenso de você.
Além do que, além do mais,
fonte
Não é tão boa ideia quanto aparece no papel.
Exemplo 1: Se você tem idade suficiente, pode se lembrar dos dias em que C era o novo garoto da cidade. Os programadores de Pascal e Ada não gostavam dos aparelhos de abertura e fechamento concisos de C. Eles # definiram
begin
eend
abrir chaves e fechar chaves, e pronto! CAda! O resultado infeliz foi feio da perspectiva de Ada ou C.Exemplo 2, pessoal: Uma das coisas que eu realmente gostei no Common Lisp Object System é que é antes, depois e em torno dos métodos. Eles podem ser muito úteis em vários lugares. Então, eu emulei esse conceito em C ++ em alguns locais selecionados. A única maneira de emular essas construções no C ++ é exigir que o desenvolvedor de uma classe derivada chame o método com o mesmo nome da classe pai no lugar certo no código. Isso colocou um requisito para os desenvolvedores que derivaram das minhas classes que eram um pouco estranhos à programação em C ++ e, talvez, contra a base da programação em C ++. Não importa o quão bem documentado esse requisito fosse, as pessoas simplesmente não seguiram as diretrizes porque ele não se encaixava perfeitamente no paradigma C ++.
fonte
Abstrações com vazamento.
fonte
out
parâmetros em uma estrutura que realmente não os suporta; O C # pressupõe que todas as funções sempre gravam em todos os seusout
parâmetros, mas os métodos não C # chamados pelos métodos C # não oferecem essa garantia.Pode ser proibitivamente difícil. Imagine tentar implementar o LINQ de C # em seu aplicativo Java. Ou que tal apenas adicionar fechamentos lexicais a um idioma? Você precisaria escrever um novo compilador, o que praticamente lhe dá um novo idioma.
Ou, nos casos em que você não precisa implementar seu próprio idioma, imagine tentar implementar métodos de coleta usando funções de ordem superior (como mapa) em um idioma que não tenha blocos de código ou funções lambda ou fechamentos ou funções como primeiro objetos de classe. Toda função de ordem superior deve ser declarada como uma interface e implementada explicitamente, e todos os estados que seriam capturados em um fechamento devem ser explicitamente armazenados na classe de implementação. É uma digitação extra e muito mais difícil de ler, que geralmente não vale a pena.
fonte