Portar código
Esta habilidad se usa para portar código de un lenguaje a otro.
Entrada
- Lenguaje destino
- Archivos fuente o código a portar
Proceso
Comienza creando un resumen de la funcionalidad clave presente en el código actual. Anota cualquier:
- Casos borde que el código o las pruebas unitarias contemplan
- Librerías utilizadas y equivalentes recomendados en el lenguaje destino.
Usa la herramienta de entrada de usuario estructurada o de preguntas para revisar cada librería utilizada y verificar con el usuario cuál equivalente usar.
Opciones adicionales a presentar:
- Simular funcionalidad de la librería
- Implementar desde cero
A continuación, porta cualquier prueba unitaria. Úsala como base para verificar el código portado.
Finalmente, porta el código usando el resumen preparado anteriormente. Itera sobre esto usando las pruebas unitarias para informar las correcciones.
Pautas generales
- Usa patrones comunes para el lenguaje destino.
- Usa convenciones de nomenclatura comunes para el lenguaje destino.
- El código portado debe reflejar el código original para que sea fácil para el usuario encontrar la funcionalidad equivalente.
- Mantén los registros y comentarios presentes en el código original.
- Anota cualquier nuevo caso borde.
- Anota cualquier cambio en la estructura del código para ayudar al usuario a orientarse.
Criterios de éxito
- Las pruebas unitarias pasan, si están presentes.
- El linting pasa, si está presente.
- Todas las piezas clave de funcionalidad están implementadas.
- Todos los casos borde identificados están contemplados.
- Todas las librerías necesarias están instaladas y listas para usar.
Ejemplos
Ejemplo de código original
/**
* Calculate the final price of the product including any discounts and with tax.
*
* Throws an error on an invalid discount.
*/
export function calculatePrice(basePrice: number, discount: number | null, taxRate: number): number {
let discountAmount = 0;
if (discount) {
if (discount >= 1) {
// If the discounts are misconfigured they can end up calculating a
// negative price. Halt before showing the user an invalid price.
throw new Error('Invalid discount');
}
discountAmount = basePrice * discount;
}
const taxAmount = (basePrice - discountAmount) * taxRate;
return (basePrice - discountAmount) + taxAmount;
}
Ejemplo de resumen
Funcionalidad clave:
- La función
calculatePriceacepta un precio base, un porcentaje de descuento y una tasa impositiva y calcula el precio final del producto.- Casos borde:
- El descuento puede ser nulo
- Si el descuento es mayor o igual a 1, lanzar una excepción para evitar precios inválidos.
- Casos borde:
Ejemplo de código portado
def calculate_price(base_price: float, discount: Optional[float], tax_rate: float) -> float:
"""
Calculate the final price of the product including any discounts and with tax.
Raises an exception on an invalid discount.
"""
discount_amount = 0
if discount is not None:
if discount >= 1:
# If the discounts are misconfigured they can end up calculating a
# negative price. Halt before showing the user an invalid price.
raise Exception('Invalid discount')
discount_amount = base_price * discount
tax_amount = (base_price - discount_amount) * tax_rate
return (base_price - discount_amount) + tax_amount
Ejemplo de respuesta
Porté el código a Python.
calculatePriceahora escalculate_price