He leído muchas veces en la web que si su lenguaje no admite algún concepto, por ejemplo, orientación a objetos o quizás llamadas a funciones, y se considera una buena práctica en este otro contexto, debe hacerlo.
El único problema que puedo ver ahora es que otros programadores pueden encontrar su código demasiado diferente de lo habitual, lo que les dificulta programar. ¿Qué otros problemas crees que pueden surgir de esto?
programming-languages
concepts
idioms
Julio Rodrigues
fuente
fuente
Respuestas:
Uno de los problemas es que puede que te encuentres escribiendo mucho código para expresar algo de la misma manera que lo harás en otro idioma, mientras que hay una forma más directa en el idioma que usas.
Por ejemplo, en una respuesta sobre Stack Overflow , he explicado cómo los contratos de código, concepto utilizado en .NET Framework, pueden emularse parcialmente en PHP, que no los admite. Terminé escribiendo mucho código por nada, ya que lo mismo era factible con matrices simples.
En términos más generales, cada idioma tiene su propia cultura, sus mejores prácticas, su propio estilo.
Si empiezo a escribir código C # como si fuera C, sería feo.
Si aprendo a Haskell como desarrollador de Java que se vio obligado a usar Haskell, pero no quiero entender sus puntos fuertes y solo quiero clonar los conceptos de Java, el código que escribiría sufrirá.
etc.
No hay nada malo en tratar de mejorar el lenguaje (por ejemplo, mejorar C # mediante la introducción de unidades de medida como en F #), pero si lo está haciendo demasiado, tal vez debería elegir un idioma diferente que realmente se ajuste a sus necesidades.
fuente
La disminución de la legibilidad es un problema en sí mismo: disminuye drásticamente el grupo de personas que potencialmente podrían mantener su proyecto sin una amplia capacitación de su parte.
Adicionalmente,
fuente
No es tan buena idea como aparece en el papel.
Ejemplo 1: si tienes la edad suficiente, puedes recordar los días en que C era el niño nuevo en la ciudad. A los programadores de Pascal y Ada no les gustaban las llaves abiertas y cerradas de C. Ellos #definieron
begin
yend
para abrir la llave y cerrar la llave, ¡y listo! CAda! El desafortunado resultado fue feo desde la perspectiva de Ada o C.Ejemplo 2, personal: una de las cosas que realmente me gustó del Common Lisp Object System es su método anterior, posterior y en torno. Pueden ser muy útiles en múltiples lugares. Así que emulé este concepto en C ++ en algunos lugares seleccionados. La única forma de emular estas construcciones en C ++ es exigir al desarrollador de una clase derivada que llame al método de la clase padre del mismo nombre en el lugar correcto del código. Esto puso un requisito para los desarrolladores que derivaron de mis clases que era un poco extraño para la programación en C ++, y tal vez en contra de la programación de C ++. No importa cuán bien documentado esté este requisito, las personas simplemente no siguieron las pautas porque no se ajustaba exactamente al paradigma de C ++.
fuente
Abstracciones con fugas.
fuente
out
parámetros en un marco que realmente no los admite; C # supone que cada función siempre escribirá en todos susout
parámetros, pero los métodos que no son C # llamados por los métodos C # no ofrecen tal garantía.Puede ser prohibitivamente difícil. Imagine intentar implementar LINQ desde C # en su aplicación Java. ¿O qué tal simplemente agregar cierres léxicos a un idioma? Tendría que escribir un nuevo compilador, que le da un nuevo lenguaje.
O, para los casos en los que no tiene que implementar su propio idioma, simplemente imagine tratar de implementar métodos de recopilación utilizando funciones de orden superior (como map) en un lenguaje que no tenga bloques de código o funciones lambda o cierres o funciones como primero objetos de clase Cada función de orden superior debe declararse como una interfaz e implementarse explícitamente, y todos los estados que se habrían capturado en un cierre deben almacenarse explícitamente en la clase implementadora. Es un tipeo adicional y mucho más difícil de leer, que a menudo no vale la pena.
fuente