¿Qué consejos puedes ofrecer a alguien que transfiere código?


8

¿Qué consejo (consejos, técnicas, trucos, etc.) tiene para alguien que está transfiriendo una biblioteca de códigos de un idioma a otro, o reescribiéndola para que funcione en un entorno de compilador diferente?


Mi consejo: no lo hagas.
JohnFx

@JohnFX - ¿No qué?
Moshe

2
no "portar", es decir, clonar algo en un nuevo idioma que conserva las características del idioma original. Vuelva a escribirlo completamente para que tenga los mismos resultados de la prueba.
S.Lott

@ S.Lott A eso me refería con "puerto".
Moshe

1
¿Qué quisiste decir con puerto? Aquí hay una pista. No hagas comentarios sobre tu propia pregunta. actualice su pregunta para que sea completa y clara como el cristal. Nunca comente su propia pregunta porque es su pregunta. Lo tienes y puedes hacerlo perfecto. Siéntase libre de eliminar los comentarios que forman un camino difícil de seguir cuando su comentario asume que sabemos de lo que está hablando con palabras como "Eso es lo que quise decir". ¿A qué se refiere "eso"?
S.Lott

Respuestas:


2

Cada plataforma (bibliotecas de idiomas y sistemas) tiene su propia personalidad. La forma en que un programador de Ruby diseña su API aprovecha las características y la cultura únicas que hacen de Ruby lo que es. Esto es claramente diferente de la forma en que un desarrollador de C o C ++ diseñaría su API, que a su vez es diferente de la forma en que lo haría un desarrollador de Java o C #.

Desea tomar las ideas de la plataforma original y moldearlas en los conceptos que hacen de la nueva plataforma lo que es. Nada se siente menos natural que usar una biblioteca diseñada de manera completamente diferente a las otras bibliotecas de la plataforma. Hay una serie de plataformas de programación que en realidad están bien diseñadas y son elegantes. Desea aprovechar esas fortalezas para su puerto.


5

Conozca las capacidades nativas de su lenguaje / marco "a" y "de".

Estaba portando una biblioteca de calendario a iOS desde Javascript. iOS tiene una clase de calendario robusta, mientras que JavaScript no tenía nada que me sirviera. (Me estaba convirtiendo de un calendario religioso al calendario gregoriano y viceversa).

Pasé tiempo reescribiendo toda la biblioteca en Objective-C solo para darme cuenta de que mi código era en gran parte redundante. (Por cierto, hice un mal trabajo y obtuve resultados inexactos. Fue entonces cuando di un paso atrás y me di cuenta de mi error).

Varias decenas de líneas de métodos de conversión fueron reemplazables con seis o más líneas de código de marco nativo.


4

Si se trata de un proyecto crítico (la migración a menudo lo es), escriba un plan de prueba completo (idealmente con pruebas unitarias en el idioma de destino) ANTES de transferir cada pieza de código y todo el sistema.

No hay forma en el mundo de que la transferencia sea 100% precisa en el primer intento, por lo que debe asegurarse de antemano de que está atrapando todo.

Si es posible, ejecute el mismo plan para el código original porque no hay garantías de que se haya escrito correctamente y, de hecho, tener un comportamiento equivalente puede depender de una implementación incorrecta.


+1 para el plan de prueba con pruebas unitarias en el idioma de destino.
Aditya P

3

-> Céntrese en la funcionalidad, no en la forma en que se ha codificado.

-> Piensa antes de escribir, porque algunos elementos ya pueden ser manejados por idioma, plataforma, etc.

-> Aprovecha la ventaja de la nueva plataforma.


1

"Portar", como parece estar usando la palabra, es solo TDD con un molesto código heredado.

Obtenga los casos de prueba correctos. Confirme que el código heredado pasa los casos de prueba.

Luego descarte el código heredado.

Luego escriba un nuevo código que pase los casos de prueba en el nuevo idioma.


0

Cree un diagrama de clase / árbol de jerarquía para que sepa cuál puerto primero. Asigne los tipos de datos básicos (int -> Int32?). Haga lo mismo para las estructuras de datos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.