GrokПопробовать
ПРАКТИЧЕСКОЕ РУКОВОДСТВО

Как использовать Grok для работы с кодом

Хорошее исправление начинается с воспроизводимого примера. Разберём весь путь на небольшой функции JavaScript — от требований до крайних случаев.

Начать с основ
ВХОД[" Design ", "design", "", "Code"]
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ["design", "code"]
ВЫБОР ЗАДАЧИ

Как сформулировать задачу по коду

Объяснить

Попросите описать вход, выход, побочные эффекты и ограничения существующей функции.

Исправить

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

Доработать

Опишите новое правило и поведение, которое должно остаться прежним.

Общий запрос «сделай код лучше» допускает слишком много трактовок. Сначала определите критерий: правильность результата, обработка некорректного ввода или читаемость.

КОНТЕКСТ ДЛЯ GROK

Минимум кода. Достаточно контекста.

ЗАДАНИЕ ДЛЯ ДИАЛОГА

JavaScript, современный браузер. Функция должна принимать массив строк, удалять пробелы по краям и пустые теги, приводить регистр к нижнему и убирать повторы. Порядок первого появления сохранить. Некорректный ввод — ошибка. Сначала уточни ограничения, затем предложи минимальное решение и тесты.

Для реальной ошибки приложите точный текст сообщения и небольшой входной набор. Удалите токены, пароли, закрытые адреса и сведения клиентов. Укажите версии библиотек, если от них зависит поведение.

ЛОГИКА РЕШЕНИЯ

Что значит «одинаковые теги»?

В нашем примере « Design » и «design» считаются одним тегом. Последовательность операций важна: сначала нормализуем строки, потом определяем уникальность. Иначе два разных исходных написания переживут удаление повторов.

Границы задачи: не исправляем опечатки, не объединяем синонимы и не выполняем языковую транслитерацию. Если такие правила нужны, их следует оговорить отдельно.

ВОСПРОИЗВЕДЕНИЕ

Ошибка в порядке операций.

НЕВЕРНЫЙ ПОРЯДОК
return [...new Set(tags)]
  .map(tag => tag.trim().toLowerCase());

Set сравнивает исходные строки. Для [" Design ", "design"] обе строки различаются, поэтому остаются в наборе. После нормализации получаем два одинаковых значения: ["design", "design"]. Это воспроизводимый пример ошибки, а не предположение о причине.

Авторская учебная анимация алгоритма. Проверки функции выполнены отдельно; ролик не имитирует терминал Grok.
ПОДГОТОВЛЕННЫЙ ПРИМЕР

Исправление, которое можно прочитать.

normalize-tags.js
function normalizeTags(tags) {
  if (!Array.isArray(tags) ||
      !Array.from(tags).every(x => typeof x === 'string')) {
    throw new TypeError('Нужен массив строк');
  }
  return [...new Set(tags
    .map(tag => tag.trim().toLowerCase())
    .filter(tag => tag.length > 0))];
}

Array.from делает пропуски массива явными значениями undefined, поэтому проверка отклоняет разреженный массив. trim удаляет крайние пробелы, toLowerCase меняет регистр, filter исключает пустые строки. Set после этих шагов убирает повторы, сохраняя порядок первого появления.

ПРОВЕРКА КОДА

Проверьте границы, а не только удачный ввод.

ВходОжидаетсяЗачем нужен тест
[" A ", "a", "B"]["a", "b"]Нормализация до уникальности
["", " "][]Удаление пустых значений
[][]Пустой вход допустим
["tag", 7]TypeErrorЧисло не должно превратиться в строку молча
Array(2)TypeErrorПропуски не должны игнорироваться

Эти тесты выполняют показанную функцию в браузере. Запрос к Grok не отправляется.

ПЕРЕД ПЕРЕНОСОМ В ПРОЕКТ

Что пример не обещает.

Решение подходит для оговорённого небольшого списка строк. Оно не нормализует все варианты Unicode и не реализует сложные правила языкового сравнения. Объём памяти растёт вместе с входными данными.

Отмечено 0 из 5

Визуально одинаковые символы — отдельное требование

Пример с тегами убирает пробелы и меняет регистр, но не выполняет Unicode-нормализацию. Одинаково выглядящие символы могут иметь разное представление и остаться двумя строками. Если это важно для ваших данных, отдельно согласуйте нормализацию NFC и добавьте тест на составной символ. MDN: как работает String.normalize() объясняет это различие.

СВОЯ ЗАДАЧА

Соберите запрос для своего случая.

Поля обрабатываются только в браузере и не сохраняются.

Если пример получился длинным, убирайте по одному независимому фрагменту и проверяйте, сохраняется ли ошибка. Первый вход в сервис описан в руководстве для начала работы.

Теперь — ваша задача.

Начните с вашей задачи.

Попробовать