代碼轉換提示詞:Python 轉 Go、JavaScript 轉 TypeScript 等跨語言遷移(保持行為一致)
要把一段代碼或一個模組改寫成另一種語言時用:不是逐行直譯,而是寫成目標語言的慣用寫法,同時列出兩種語言語義差異帶來的行為變化,並給出對拍測試,證明新舊代碼結果一致。
通用大模型 對話模型通用
【角色】你是一名同時精通 [源語言] 和 [目標語言] 的工程師,做過多次生產環境的語言遷移,知道遷移出事故幾乎都出在「看起來一樣、其實語義不同」的地方。 【背景】 - 原始碼語言與版本:[源語言及版本] - 目標語言與版本:[目標語言及版本] - 遷移原因:[如性能、統一技術棧、類型安全] - 目標環境可用的依賴限制(如只能用標準庫):[依賴限制] - 待轉換代碼: [粘貼原始碼] 【任務】 1. 先概括原始碼的輸入、輸出和副作用(讀寫文件、網絡、全局狀態),作為「行為契約」。 2. 給出依賴映射表:源語言的庫或內置功能 | 目標語言的對應方案 | 差異說明。 3. 寫出目標語言代碼:使用目標語言的慣用寫法(錯誤處理方式、命名規範、並發模型、包結構),不要逐行直譯。 4. 列出語義差異清單,至少檢查這些點並說明你是如何處理的: - 整數除法與取模對負數的取整方向、整數溢出(任意精度 vs 固定位寬); - 字符串是按字節、碼元還是字符計數與切片; - 字典或映射的遍歷順序是否穩定; - 空值語義(None、null、undefined、nil、零值); - 異常與錯誤返回、預設參數與可變預設值、浮點格式化與舍入; - 時間與時區、正則方言、排序是否穩定。 5. 給出對拍測試:一組覆蓋邊界情況的輸入,以及分別在新舊代碼上運行並比較輸出的測試代碼。 【約束】 - 行為必須與原始碼一致,包括邊界和報錯情況;如果原始碼本身有 bug,保留原行為並在清單中單獨標出,由我決定是否修。 - 目標語言沒有直接對應的特性時,說明取捨,不要靜默改變行為。 - 推測出的意圖要標註「推測」。 【輸出格式】 行為契約 → 依賴映射表 → 目標代碼(代碼塊)→ 語義差異清單(差異 | 源語言行為 | 目標語言行為 | 處理方式)→ 對拍測試 → 遺留問題。
高亮處換成你自己的內容:[源語言]、[目標語言]、[源語言及版本]、[目標語言及版本]、[如性能、統一技術棧、類型安全]、[依賴限制]、[粘貼原始碼]
ChatGPT Plus 充值
已被複製 0 次
使用說明
怎麼填變量:版本要寫具體,「Python 3.12 → Go 1.22」和只寫「Python 轉 Go」得到的結果不一樣(比如是否能用泛型)。[依賴限制] 很關鍵:不寫的話,AI 可能引入你們不允許用的第三方庫。
常見坑:
- 逐行直譯的代碼能跑,但往往不地道,比如在 Go 裏模擬 try/except、在 TypeScript 裏滿屏 any。
- JavaScript 轉 TypeScript 不只是加類型:要明確 null 和 undefined 的區別,建議開啟 strict 模式,類型實在不確定時用 unknown 並在使用處收窄,而不是 any。
- 一次轉換的代碼量控制在一個模組或幾百行以內,太長時先讓它出「模組拆分與遷移順序」。
追問技巧:把對拍測試的失敗輸出貼回去,說「這組輸入結果不一致,定位原因」;全部通過後追問「還有哪些輸入是對拍沒覆蓋到的」。
示例輸出
示例,僅供參考(語義差異清單節選,Python → Go)
| 差異 | Python | Go | 處理方式 |
|---|---|---|---|
| 負數整除 | -7 // 2 得 -4(向下取整) | -7 / 2 得 -3(向零取整) | 封裝 floorDiv |
| 字典遍歷 | 按插入順序 | map 遍歷順序隨機 | 輸出前對 key 排序 |
go
// floorDiv 與 Python 的 // 行為一致:向負無窮取整。b 不能為 0。
func floorDiv(a, b int) int {
q := a / b
if a%b != 0 && (a < 0) != (b < 0) {
q--
}
return q
}
改編自 @woyxiang / f/awesome-chatgpt-prompts「Code Translator: Any Language to Any Language」,許可證 CC0 1.0。
同款作品
用這條提示詞做出來的作品;原作者會因此獲得積分
還沒有同款,來做第一個。


0 條評論
還沒有評論,來搶沙發~