Code portieren
Diese Fähigkeit wird verwendet, um Code von einer Sprache in eine andere Sprache zu portieren.
Eingabe
- Zielsprache
- Quelldateien oder zu portierenden Code
Ablauf
Beginnen Sie damit, eine Gliederung der wichtigsten Funktionalitäten zu erstellen, die im aktuellen Code vorhanden sind. Notieren Sie alle:
- Randfälle, die der Code oder die Komponententests abdecken
- Verwendete Bibliotheken und empfohlene Äquivalente in der Zielsprache.
Nutzen Sie das strukturierte Benutzereingabe- oder Fragentool, um jede verwendete Bibliothek durchzugehen und mit dem Benutzer zu klären, welches Äquivalent verwendet werden soll.
Zusätzliche Optionen zur Auswahl:
- Bibliotheksfunktionalität bereitstellen
- Von Grund auf neu implementieren
Portieren Sie als Nächstes alle Komponententests. Verwenden Sie diese als Grundlage zur Überprüfung des portierten Codes.
Portieren Sie schließlich den Code mithilfe der zuvor erstellten Gliederung. Iterieren Sie diesen Schritt unter Verwendung der Komponententests, um Korrekturen vorzunehmen.
Allgemeine Richtlinien
- Verwenden Sie Muster, die für die Zielsprache üblich sind.
- Verwenden Sie Namenskonventionen, die für die Zielsprache üblich sind.
- Der portierte Code sollte den ursprünglichen Code widerspiegeln, sodass der Benutzer leicht entsprechende Funktionalitäten finden kann.
- Behalten Sie Logging und Kommentare bei, die im ursprünglichen Code vorhanden sind.
- Notieren Sie alle neuen Randfälle.
- Notieren Sie alle Änderungen an der Struktur des Codes, um dem Benutzer die Orientierung zu erleichtern.
Erfolgskriterien
- Komponententests bestehen, falls vorhanden.
- Linting ist erfolgreich, falls vorhanden.
- Alle wesentlichen Funktionalitäten sind implementiert.
- Alle identifizierten Randfälle sind berücksichtigt.
- Alle benötigten Bibliotheken sind installiert und einsatzbereit.
Beispiele
Beispielhafter Originalcode
/**
* 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;
}
Beispielhafte Gliederung
Wesentliche Funktionalität:
- Die Funktion
calculatePriceakzeptiert einen Grundpreis, einen Rabattprozentsatz und einen Steuersatz und berechnet den Endpreis des Produkts.- Randfälle:
- Rabatt kann null sein
- Wenn der Rabatt größer oder gleich 1 ist, wird eine Ausnahme ausgelöst, um ungültige Preise zu verhindern.
- Randfälle:
Beispielhafter portierter Code
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
Beispielhafte Antwort
Ich habe den Code nach Python portiert.
calculatePriceheißt jetztcalculate_price