Основные принципы разработки кия
Эффективная стратегия коммуникации имеет решающее значение при сотрудничестве с кодовыми помощниками ИИ. Представьте, что вы наставляете коллегу, который технически грамотен, но ничего не знает о подоплеке вашего проекта, и вам нужно предоставить ему достаточно информации, чтобы он понял и решил проблему.
Ключевые принципы
Предоставьте адекватную контекстуальную информацию
- Используемый язык программирования и версия фреймворка
- Специфические сообщения об ошибках и трассировка стека
- Ожидаемая функциональность и фактическая производительность кода
- Соответствующие ограничения проекта и технологические стеки
Уточнение конкретных целей Избегайте расплывчатых описаний и четко сформулируйте, какую проблему вы пытаетесь решить:
❌ "Сделайте мой код лучше" ✅ "Переделайте эту функцию, чтобы улучшить читаемость, уменьшить дублирование кода и использовать синтаксис ES6"
Пошаговый подход к решению сложных задач Разбейте большие задачи на маленькие шаги:
1. сначала создайте базовую структуру компонента React
2. затем добавьте логику управления состояниями
3. наконец, интегрируйте вызовы API и обработку ошибок.
Приведите примеры ввода и вывода данных Желаемое поведение иллюстрируется на конкретных примерах:
// Ожидается: formatPrice(2.5) возвращает "$2.50".
// Ожидается: formatPrice(100) возвращает "$100.00".
Эффективные советы по отладке сценариев
Реальный пример: проблемы с зависимостями React Hook
Код проблемы:
const UserProfile = ({ userId }) => {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetchUser(userId).then(setUser).finally(() => setLoading(false))
}, [userId, setUser, setLoading]); // вот в чем проблема
return loading ? <div>Загрузка...</div> : <div>{пользователь?.имя}</div>;
};
❌ Неэффективные советы:
У меня проблема с useEffect, компонент постоянно перерисовывается!
✅ Эффективный совет:
У меня есть компонент React с проблемами бесконечного повторного рендеринга:
Ожидаемое поведение: получить данные пользователя один раз при изменении userId
Фактическое поведение: компонент перерисовывается в бесконечном цикле
Сообщение об ошибке: Предупреждение: превышена максимальная глубина обновления
Код приведен выше, проблема в массиве зависимостей useEffect. нужно ли добавить в зависимость setUser и setLoading? Почему это приводит к бесконечному циклу? Пожалуйста, объясните лучшие практики для зависимостей React Hook.
Шаблоны советов по отладке
Описание проблемы: [краткое описание проблемы]
Ожидаемое поведение: [что должен делать код]
Фактическое поведение: [то, что происходит сейчас]
Сообщение об ошибке: [полное сообщение об ошибке].
Соответствующий код: [приведите фрагмент кода].
Техническая среда: [версия языка, версия фреймворка]
Систематический подход к реконструкции сценариев
Уточните цели рефакторинга
Рефакторинг должен проводиться с четким указанием направления улучшения:
цель реконструкции | Шаблоны советов | типичный пример |
---|---|---|
оптимизация производительности | "Оптимизируйте эту функцию для [конкретного показателя производительности]". | "Оптимизируйте эту функцию, чтобы устранить сложность O(n²)". |
Очистка кода | "Рефакторинг для улучшения [читабельности/поддерживаемости]" | "Рефакторить эту функцию, чтобы уменьшить вложенность и улучшить именование" |
Обновление технологий | "Перепишите [старую технологию] в [новую технологию]". | "Переписывание компонентов класса в компоненты функций с помощью крючков" |
Практический пример: рефакторинг с оптимизацией производительности
Оригинальный код (с проблемой O(n²)):
function processUserData(users, orders) {
const result = [];
for (let user of users) {
const userOrders = [];
for (let order of orders) {
if (order.userId === user.id) {
userOrders.push(order);
}
}
const totalSpent = userOrders.reduce((sum, order) => sum + order.amount, 0);
result.push({ ...user, orders: userOrders, totalSpent });
}
return result;
}
✅ Советы по оптимизации производительности:
Следующая функция имеет временную сложность O(n²) и должна быть оптимизирована до O(n):
[код]
Требования к оптимизации:
1. устранить вложенные циклы, использовать Map для O(1) поиска
2. сократить повторные вычисления, обход для завершения агрегации данных
3. сохранить читабельность кода, добавить комментарии по производительности
4. обработать крайние случаи: пользователи без заказов
Пожалуйста, предоставьте рефакторинговый код и объясните идею оптимизации.
Прогрессивные советы по разработке функций
Многоуровневая разработка от архитектуры до реализации
Шаг 1: Архитектурный дизайн
Проектирование архитектуры управления состоянием для многошаговых форм:
Функциональные требования:
- Поддержка трехэтапного процесса создания формы
- Проверка в реальном времени и сохранение данных
- Навигация вперед/назад
Технологический стек: React + TypeScript + React Hook Form
Пожалуйста, предоставьте:
- Дизайн государственной структуры
- Дизайн интерфейса главного хука
- Логика перехода состояний
Шаг 2: Реализация ядра
Основываясь на предыдущем архитектурном проекте, реализуйте основной хук useMultiStepForm:
Требования:
1. управлять текущим шагом и данными формы
2. предоставлять методы nextStep, prevStep, updateStepData
3. интегрировать логику валидации формы
4. автоматическое сохранение в localStorage
Пожалуйста, предоставьте полный код реализации Hook.
Шаблоны функциональной разработки
## Описание задачи
[Проблема, которую вы пытаетесь решить]
## Техническая среда
- Язык/фреймворк:
- Информация о версии:
- Связанные библиотеки:
## Специфические требования.
- Функциональные требования:
- Требования к производительности:
- Стиль кода:
## Ограничения
- Не может быть использовано:
- Должны соблюдаться:
## Желаемые результаты
[Опишите формат желаемого результата].
Советы по продвижению и распространенные заблуждения
Десять советов для высокоэффективной подсказки
изысканность | шаблон | сценарий применения |
---|---|---|
persona | "Вы старший [язык] разработчик, пожалуйста, [задание]". | Анализ кода, архитектурные рекомендации |
Диагностика проблем | "Это проблема: [описание] со следующим кодом, в чем причина?". | Расположение ошибки |
Пример водителя | "Функция на входе [X] должна выводить [Y], пожалуйста, реализуйте". | Развитие функций |
шаг за шагом | "Проанализируйте эту функцию построчно, как изменяются значения переменных?" | Логическая отладка |
ограничивать что-л. в определенной степени | "Пожалуйста, избегайте [X], используйте [Y], оптимизируйте [Z]". | Соответствие спецификациям проекта |
Распространенные заблуждения и решения
1. Информационная перегрузка ❌ Одновременное решение нескольких сложных задач ✅ Пошаговый подход к решению каждой задачи
2. недостаточная информация ❌ "Исправьте мой код" ✅ Предоставьте сообщения об ошибках, ожидаемое поведение, соответствующий код.
3. Неоднозначность цели ❌ "Сделать код лучше" ✅ "Улучшить читаемость и сократить использование памяти"
Режим оповещения о пересмотре кода
Выступите в роли старшего технического архитектора и проведите углубленный анализ следующего кода:
[содержание кода]
Проверьте следующие параметры:
1. архитектурный дизайн: соответствует ли он принципам SOLID?
2. производительность: есть ли узкие места в производительности?
3. безопасность: есть ли уязвимости в системе безопасности?
4. удобство сопровождения: легко ли понять и модифицировать код?
Пожалуйста, укажите конкретные проблемы, предложения и примеры улучшений.
Рекомендации по лучшей практике
Непрерывное итеративное совершенствование
Раунд 1: Получение базового решения
Раунд 2: Оптимизация и улучшение
Раунд 3: Добавьте обработку ошибок и тестирование
Проверка и обучение
- Всегда проверяйте код, сгенерированный искусственным интеллектом
- Проведите тесты, чтобы убедиться в корректной функциональности
- Анализ идей решений ИИ
- Документирование эффективных моделей подсказок
заключительные замечания
Разработка кия - это практический навык, который необходимо оттачивать на практике. Благодаря четкому общению, конкретным требованиям и терпеливым итерациям вы сможете значительно повысить эффективность программирования. Помните, что ИИ-помощник - это как партнер, который умен, но нуждается в четком руководстве, и хорошая подсказка может сделать его способным помощником на вашем пути программирования.