искра/бот
Инструкция Промпт Все статьи Войти Регистрация

Как перевести код на другой язык с Искрой

Переносите поведение функции, а не только синтаксис. Искра поможет сопоставить типы и подготовить новую реализацию, а одинаковые тестовые наборы покажут расхождения до интеграции.

Иллюстрация к инструкции: Как перевести код на другой язык с Искрой

Как сделать это с Искрой

Работающий перевод должен одинаково обрабатывать допустимые и ошибочные данные, сохранять точность и не добавлять побочные действия. Пример ниже переносит небольшую функцию суммирования денежных значений из Python в JavaScript. Он намеренно использует строки с целыми копейками: так формат входа не зависит от автоматического преобразования чисел при обмене JSON. Это учебный код, а не готовая миграция платежной системы.

  1. Выберите небольшой фрагмент и версии. Укажите исходный язык, целевую среду, версии и доступные зависимости. Для примера использованы Python 3.13.2 и Node.js 24.7.0. Уберите обращения к рабочей базе, ключи и внешние сервисы. Сначала переносите отдельную функцию, затем ее интеграцию с остальным приложением.
  2. Запишите контракт до перевода. Определите допустимые типы, границы значений, результат, ошибки и побочные эффекты. Для денежных данных укажите единицы и правила точности. Фраза «сделай то же самое» недостаточна: уточните пустой вход, пробелы, знак, дробную запись, ведущие нули, неверный тип и слишком длинный набор.
  3. Зафиксируйте исходное поведение. Сохраните примеры, которые проходят в исходной реализации, и ожидаемые ошибки. Если исходник нарушает согласованный контракт, сначала решите, сохранять старое поведение или исправлять его отдельной задачей. Не смешивайте перенос с незаметным улучшением правил. Потребители функции должны получить предсказуемое изменение.
  4. Попросите карту различий и новую функцию. До кода получите объяснение соответствия типов, регулярных выражений, исключений и представления результата. В примере Python int сопоставляется с BigInt, а наружу обе функции возвращают строку. Не заменяйте точный расчет промежуточным Number и не добавляйте автоматическое исправление входных данных.
  5. Сравните обе версии на одном наборе. Запустите исходник и перевод в изолированной рабочей папке. Передайте одинаковые JSON-совместимые данные и сравните результат или согласованный код ошибки. Проверьте граничные строки, пустой список, неправильный тип, завершающий перенос строки и большой итог. После вызова убедитесь, что вход не изменился.
  6. Интегрируйте отдельным изменением. Проверьте формат ответа вызывающей системе, обработку ошибок и зависимости целевого окружения. Сохраните контрольные примеры в проекте и проведите ревью. Для изменения большого сервиса предусмотрите ограниченный запуск и возврат прежней реализации. Успех маленькой функции не доказывает совместимость всей системы.

Готовый промпт - скопируйте и вставьте

Замените подсказки в квадратных скобках своими данными. Проверьте, какие материалы разрешено передавать в вашу установку Искры.

📎 Можно прикрепить файлы (PDF, DOCX, XLSX, PPTX, картинки) 🌐 Можно включить веб-поиск для актуальной информации
Перенеси функцию из Python [версия] в JavaScript для Node.js [версия], сохранив согласованный контракт.
Исходный код: [приложить]. Зависимости: только стандартные возможности среды. Вход: массив до 10000 строк с суммами в копейках. Строка содержит ASCII-цифры, от 1 до 12 знаков; допустима «0», ведущие нули, знак, пробелы, дробная часть и перенос строки запрещены. Выход: десятичная строка точной суммы. Пустой массив дает «0». Вход не меняется. Ошибка контейнера имеет код input, неверного элемента amount:N, где N начинается с 0. Другие побочные действия запрещены.
Сначала составь карту различий типов и поведения. Затем дай исходный и целевой файлы, команды запуска и общий набор тестовых данных с ожидаемыми значениями. В JavaScript используй BigInt для суммы и строку на границе функции, не промежуточный Number. Убедись, что регулярное выражение проверяет всю строку, включая конец. Не исправляй неверный ввод автоматически. Если исходник расходится с контрактом, остановись и покажи различие. Отдели предложенные тесты от реально выполненных, укажи версии среды и оставшиеся ограничения.
Открыть Искру →

Что можно сделать дальше

Совет 1

Сравнивайте результаты как данные

Разный формат вывода в консоль может скрыть одинаковое значение или наоборот. Сравнивайте тип и содержимое результата, а ошибки приведите к согласованным кодам.

Совет 2

Добавляйте случаи из рабочего контекста

После учебных проверок нужны реальные обезличенные примеры проекта: кодировки, часовые пояса и форматы дат, если функция с ними работает.

Совет 3

Не меняйте правила ради удобства

Автоматическое удаление пробелов или преобразование числа в строку может сделать перевод несовместимым. Такие изменения согласуются отдельно.

Что важно учесть перед использованием результата

Перевод кода между языками требует сопоставления наблюдаемого поведения, а не буквальной замены конструкций.

Зачем это нужно

Различия числовых типов, строк и обработки ошибок проявляются на границах, даже когда обычный пример работает одинаково.

Как получить полезный результат

Используйте явный контракт, карту типов и одинаковые проверочные наборы. Сначала проверьте функцию отдельно, затем вызовы из приложения.

Где пригодится результат

Такой порядок помогает увидеть скрытые допущения до выпуска. Он не обещает автоматического переноса проекта, библиотек и инфраструктуры целиком.

Проверяемый перенос суммы строковых копеек

Учебный редакционный пример. Данные вымышлены; это не запись реального запуска Искры.

Полный вход

Скачать текст

Вымышленная задача: ["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". Примеры обеих реализаций проверены локально на одинаковом наборе данных, без обращения к Искре или рабочим системам.

Как проверить пример

Ошибки, которые стоит проверить

Сменить точность незаметно

Сумма может превысить точный диапазон Number. Используйте выбранное контрактом представление и проверьте большой итог.

Проверить только счастливый путь

Пробел, ведущий ноль или завершающий перевод строки могут обрабатываться по-разному. Нужны отрицательные примеры.

Выдать локальную проверку за промышленную

Учебная функция не проверяет авторизацию, нагрузку, окружение и интеграцию сервиса. Эти проверки выполняются в проекте отдельно.

Все статьи о работе в Искре →