Как сделать это с Искрой
Работающий перевод должен одинаково обрабатывать допустимые и ошибочные данные, сохранять точность и не добавлять побочные действия. Пример ниже переносит небольшую функцию суммирования денежных значений из Python в JavaScript. Он намеренно использует строки с целыми копейками: так формат входа не зависит от автоматического преобразования чисел при обмене JSON. Это учебный код, а не готовая миграция платежной системы.
- Выберите небольшой фрагмент и версии. Укажите исходный язык, целевую среду, версии и доступные зависимости. Для примера использованы Python 3.13.2 и Node.js 24.7.0. Уберите обращения к рабочей базе, ключи и внешние сервисы. Сначала переносите отдельную функцию, затем ее интеграцию с остальным приложением.
- Запишите контракт до перевода. Определите допустимые типы, границы значений, результат, ошибки и побочные эффекты. Для денежных данных укажите единицы и правила точности. Фраза «сделай то же самое» недостаточна: уточните пустой вход, пробелы, знак, дробную запись, ведущие нули, неверный тип и слишком длинный набор.
- Зафиксируйте исходное поведение. Сохраните примеры, которые проходят в исходной реализации, и ожидаемые ошибки. Если исходник нарушает согласованный контракт, сначала решите, сохранять старое поведение или исправлять его отдельной задачей. Не смешивайте перенос с незаметным улучшением правил. Потребители функции должны получить предсказуемое изменение.
- Попросите карту различий и новую функцию. До кода получите объяснение соответствия типов, регулярных выражений, исключений и представления результата. В примере Python int сопоставляется с BigInt, а наружу обе функции возвращают строку. Не заменяйте точный расчет промежуточным Number и не добавляйте автоматическое исправление входных данных.
- Сравните обе версии на одном наборе. Запустите исходник и перевод в изолированной рабочей папке. Передайте одинаковые JSON-совместимые данные и сравните результат или согласованный код ошибки. Проверьте граничные строки, пустой список, неправильный тип, завершающий перенос строки и большой итог. После вызова убедитесь, что вход не изменился.
- Интегрируйте отдельным изменением. Проверьте формат ответа вызывающей системе, обработку ошибок и зависимости целевого окружения. Сохраните контрольные примеры в проекте и проведите ревью. Для изменения большого сервиса предусмотрите ограниченный запуск и возврат прежней реализации. Успех маленькой функции не доказывает совместимость всей системы.
Готовый промпт - скопируйте и вставьте
Замените подсказки в квадратных скобках своими данными. Проверьте, какие материалы разрешено передавать в вашу установку Искры.
Перенеси функцию из Python [версия] в JavaScript для Node.js [версия], сохранив согласованный контракт.
Исходный код: [приложить]. Зависимости: только стандартные возможности среды. Вход: массив до 10000 строк с суммами в копейках. Строка содержит ASCII-цифры, от 1 до 12 знаков; допустима «0», ведущие нули, знак, пробелы, дробная часть и перенос строки запрещены. Выход: десятичная строка точной суммы. Пустой массив дает «0». Вход не меняется. Ошибка контейнера имеет код input, неверного элемента amount:N, где N начинается с 0. Другие побочные действия запрещены.
Сначала составь карту различий типов и поведения. Затем дай исходный и целевой файлы, команды запуска и общий набор тестовых данных с ожидаемыми значениями. В JavaScript используй BigInt для суммы и строку на границе функции, не промежуточный Number. Убедись, что регулярное выражение проверяет всю строку, включая конец. Не исправляй неверный ввод автоматически. Если исходник расходится с контрактом, остановись и покажи различие. Отдели предложенные тесты от реально выполненных, укажи версии среды и оставшиеся ограничения.Что можно сделать дальше
Сравнивайте результаты как данные
Разный формат вывода в консоль может скрыть одинаковое значение или наоборот. Сравнивайте тип и содержимое результата, а ошибки приведите к согласованным кодам.
Добавляйте случаи из рабочего контекста
После учебных проверок нужны реальные обезличенные примеры проекта: кодировки, часовые пояса и форматы дат, если функция с ними работает.
Не меняйте правила ради удобства
Автоматическое удаление пробелов или преобразование числа в строку может сделать перевод несовместимым. Такие изменения согласуются отдельно.
Что важно учесть перед использованием результата
Перевод кода между языками требует сопоставления наблюдаемого поведения, а не буквальной замены конструкций.
Зачем это нужно
Различия числовых типов, строк и обработки ошибок проявляются на границах, даже когда обычный пример работает одинаково.
Как получить полезный результат
Используйте явный контракт, карту типов и одинаковые проверочные наборы. Сначала проверьте функцию отдельно, затем вызовы из приложения.
Где пригодится результат
Такой порядок помогает увидеть скрытые допущения до выпуска. Он не обещает автоматического переноса проекта, библиотек и инфраструктуры целиком.
Проверяемый перенос суммы строковых копеек
Учебный редакционный пример. Данные вымышлены; это не запись реального запуска Искры.
Полный вход
Вымышленная задача: ["1050", "250", "0"] должно дать строку "1300", что соответствует 13 рублям. Пустой список дает "0", ["01"] и ["1\n"] дают ошибку amount:0. Исходный файл source.py для Python 3.13.2:
import re
def total_cents(amounts):
if type(amounts) is not list or len(amounts) > 10000:
raise ValueError("input")
total = 0
for i, value in enumerate(amounts):
if type(value) is not str or re.fullmatch(r"0|[1-9][0-9]{0,11}", value) is None:
raise ValueError(f"amount:{i}")
total += int(value)
return str(total)
print(total_cents(["1050", "250", "0"]))Пример результата
Целевой файл target.js для Node.js 24.7.0:
function totalCents(amounts) {
if (!Array.isArray(amounts) || amounts.length > 10000) {
throw new Error("input");
}
let total = 0n;
for (let i = 0; i < amounts.length; i++) {
const value = amounts[i];
const match = typeof value === "string"
? /^(0|[1-9][0-9]{0,11})$/.exec(value) : null;
if (!match || match[0] !== value) {
throw new Error(`amount:${i}`);
}
total += BigInt(value);
}
return total.toString();
}
console.log(totalCents(["1050", "250", "0"]));
Команды: python3 source.py и node target.js. В обеих средах ожидаемый вывод 1300. Для предельного набора 10000 значений "999999999999" точная строка результата: "9999999999990000". Примеры обеих реализаций проверены локально на одинаковом наборе данных, без обращения к Искре или рабочим системам.Как проверить пример
- Обычная сумма 1050 + 250 + 0 равна 1300 копейкам.
- Сравниваются код ошибки и индекс, а не имя класса исключения разных языков.
- Большой итог остается точным; исходный массив после вызова не меняется.
Ошибки, которые стоит проверить
Сменить точность незаметно
Сумма может превысить точный диапазон Number. Используйте выбранное контрактом представление и проверьте большой итог.
Проверить только счастливый путь
Пробел, ведущий ноль или завершающий перевод строки могут обрабатываться по-разному. Нужны отрицательные примеры.
Выдать локальную проверку за промышленную
Учебная функция не проверяет авторизацию, нагрузку, окружение и интеграцию сервиса. Эти проверки выполняются в проекте отдельно.
Связанные материалы
- ИИ для программиста: Новая функция, рефакторинг и проверка кода.
- ИИ для системного администратора: Контекст запуска и эксплуатационные проверки.
- Документация системы и процесса: Описание изменений и проверяемых эксплуатационных действий.