コードの移植
このスキルは、ある言語から別の言語へコードを移植するために使用されます。
入力
- ターゲット言語
- 移植するソースファイルまたはコード
プロセス
まず、現在のコードに存在する主要な機能の概要を作成します。以下の点に注意してください:
- コードや単体テストが考慮しているエッジケース
- 使用されているライブラリと、ターゲット言語での推奨相当ライブラリ
構造化されたユーザー入力または質問ツールを使用して、使用されている各ライブラリについて順に確認し、ユーザーとどの相当ライブラリを使用するかを検討します。
追加のオプションとして以下を提示します:
- ライブラリ機能のスタブ化
- スクラッチから実装
次に、単体テストを移植します。これを移植コードの検証の基礎として使用します。
最後に、事前に準備した概要を使用してコードを移植します。単体テストを活用して修正を行いながら、これを反復的に進めます。
一般的なガイドライン
- ターゲット言語で一般的なパターンを使用する。
- ターゲット言語で一般的な命名規則を使用する。
- 移植コードは元のコードを反映し、ユーザーが同等の機能を簡単に見つけられるようにする。
- 元のコードに存在するログ出力やコメントを維持する。
- 新しいエッジケースがあれば記載する。
- コード構造の変更があれば、ユーザーが方向性を把握できるように記載する。
成功条件
- 単体テストが存在する場合は通過すること。
- リンターが存在する場合は通過すること。
- すべての主要な機能が実装されていること。
- 特定されたすべてのエッジケースが対応されていること。
- 必要なライブラリがすべてインストールされ、使用可能であること。
例
元のコード例
/**
* 割引を含む製品の最終価格を計算し、税金を加算します。
*
* 無効な割引の場合はエラーをスローします。
*/
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になりました。