코드 포팅
이 스킬은 코드를 한 언어에서 다른 언어로 포팅하는 데 사용됩니다.
입력
- 대상 언어
- 포팅할 소스 파일 또는 코드
프로세스
현재 코드에 있는 주요 기능의 개요를 작성하는 것으로 시작합니다. 다음 사항을 기록하세요.
- 코드 또는 단위 테스트가 다루는 엣지 케이스
- 사용된 라이브러리와 대상 언어의 권장 대체 라이브러리
구조화된 사용자 입력 또는 질문 도구를 사용하여 각 라이브러리를 하나씩 살펴보고 사용자와 어떤 대체 라이브러리를 사용할지 확인합니다.
추가 옵션:
- 라이브러리 기능 스텁 처리
- 처음부터 직접 구현
다음으로 모든 단위 테스트를 포팅합니다. 이를 포팅된 코드 검증의 기준으로 사용합니다.
마지막으로 미리 준비한 개요를 사용하여 코드를 포팅합니다. 단위 테스트를 통해 수정 사항을 확인하며 반복합니다.
일반 지침
- 대상 언어에 일반적인 패턴을 사용합니다.
- 대상 언어에 일반적인 명명 규칙을 사용합니다.
- 포팅된 코드는 원본 코드를 반영하여 사용자가 동등한 기능을 쉽게 찾을 수 있도록 해야 합니다.
- 원본 코드에 있는 로깅 및 주석을 유지합니다.
- 새로운 엣지 케이스를 기록합니다.
- 사용자가 방향을 잡을 수 있도록 코드 구조의 변경 사항을 기록합니다.
성공 기준
- 단위 테스트가 통과합니다(있는 경우).
- 린트 검사가 통과합니다(있는 경우).
- 모든 주요 기능이 구현되었습니다.
- 식별된 모든 엣지 케이스가 처리되었습니다.
- 필요한 모든 라이브러리가 설치되어 사용 가능합니다.
예제
예제 원본 코드
/**
* 할인 및 세금을 포함한 제품 최종 가격을 계산합니다.
*
* 유효하지 않은 할인에 대해 오류를 발생시킵니다.
*/
export function calculatePrice(basePrice: number, discount: number | null, taxRate: number): number {
let discountAmount = 0;
if (discount) {
if (discount >= 1) {
// 할인이 잘못 설정되면 음수 가격이 계산될 수 있습니다.
// 사용자에게 유효하지 않은 가격을 보여주기 전에 중단합니다.
throw new Error('Invalid discount');
}
discountAmount = basePrice * discount;
}
const taxAmount = (basePrice - discountAmount) * taxRate;
return (basePrice - discountAmount) + taxAmount;
}
예제 개요
주요 기능:
calculatePrice함수는 기본 가격, 할인율, 세율을 받아 제품의 최종 가격을 계산합니다.- 엣지 케이스:
- 할인은 null일 수 있음
- 할인이 1 이상이면 예외를 발생시켜 유효하지 않은 가격을 방지
- 엣지 케이스:
예제 포팅된 코드
def calculate_price(base_price: float, discount: Optional[float], tax_rate: float) -> float:
"""
할인 및 세금을 포함한 제품 최종 가격을 계산합니다.
유효하지 않은 할인에 대해 예외를 발생시킵니다.
"""
discount_amount = 0
if discount is not None:
if discount >= 1:
# 할인이 잘못 설정되면 음수 가격이 계산될 수 있습니다.
# 사용자에게 유효하지 않은 가격을 보여주기 전에 중단합니다.
raise Exception('Invalid discount')
discount_amount = base_price * discount
tax_amount = (base_price - discount_amount) * tax_rate
return (base_price - discount_amount) + tax_amount
예제 응답
코드를 Python으로 포팅했습니다.
calculatePrice는 이제calculate_price입니다.