Code

Debug через діалог: Техніка виправлення помилок у JavaScript за допомогою Gemini та Claude

05.12.2025
3 переглядів

Вступ: Нова ера дебагінгу

Виправлення помилок (debugging) - невід'ємна частина програмування. Традиційно розробники витрачали години на пошук багів, читання документації та експерименти. Але з появою AI-асистентів, таких як Gemini та Claude, процес дебагінгу став інтерактивним діалогом, де AI допомагає не лише знайти помилку, але й зрозуміти її причину.

У цій статті ми розглянемо техніки діалогового дебагінгу - як формулювати запити, щоб AI швидко та ефективно допомагав виправляти помилки в JavaScript.

Chrome DevTools Debugging

Чому діалоговий дебагінг ефективний

Переваги AI-дебагінгу:

  1. Миттєва допомога: Не потрібно шукати в Stack Overflow
  2. Пояснення: AI не лише виправляє, але й пояснює причину помилки
  3. Навчання: Ви вчитеся на реальних прикладах
  4. Контекст: AI враховує весь ваш код, а не лише фрагмент

Базові принципи ефективного промпту для дебагінгу

Щоб AI швидко знайшов помилку, ваш промпт має містити:

  1. Код з помилкою: Повний фрагмент коду
  2. Повідомлення про помилку: Точний текст помилки з консолі
  3. Очікувана поведінка: Що має робити код
  4. Фактична поведінка: Що відбувається насправді
  5. Контекст: Де використовується код (браузер, Node.js)

Промпт #1: ReferenceError - найпоширеніша помилка

Сценарій: Ви отримали помилку "ReferenceError: x is not defined".

Ось фрагмент мого JavaScript-коду, який не запускається і видає "ReferenceError: userName is not defined". Знайди помилку, виправ її та поясни, чому це сталося, використовуючи простий приклад.

Код:
function greetUser() {
  console.log("Hello, " + userName);
}

greetUser();

Що робить цей промпт ефективним:

  • Точний текст помилки
  • Повний код функції
  • Прохання про пояснення
  • Прохання про простий приклад

Очікувана відповідь AI:

AI поясніть, що змінна userName не оголошена, і запропонує виправлення:

function greetUser() {
  const userName = "User"; // Оголошення змінної
  console.log("Hello, " + userName);
}

greetUser();

Промпт #2: TypeError - помилки типів

Сценарій: Помилка "TypeError: Cannot read property 'length' of undefined".

Мій код видає помилку "TypeError: Cannot read property 'length' of undefined". Ось код:

function getArrayLength(arr) {
  return arr.length;
}

console.log(getArrayLength());

Поясни, чому це відбувається, та запропонуй виправлення з перевіркою на undefined.

Ключові елементи:

  • Точна помилка
  • Код функції та виклику
  • Прохання про перевірку на undefined

Очікуване виправлення:

function getArrayLength(arr) {
  if (arr === undefined || arr === null) {
    return 0; // Або інше значення за замовчуванням
  }
  return arr.length;
}

console.log(getArrayLength()); // 0
console.log(getArrayLength([1, 2, 3])); // 3

Промпт #3: Асинхронні помилки

Сценарій: Проблеми з async/await або промісами.

Мій асинхронний код не працює правильно. Ось код:

async function fetchData() {
  const response = fetch('https://api.example.com/data');
  const data = response.json();
  console.log(data);
}

fetchData();

Що не так? Поясни, як правильно використовувати async/await, та виправ код.

Що важливо:

  • Вказано, що код асинхронний
  • Повний код функції
  • Прохання про пояснення async/await

Виправлення:

async function fetchData() {
  const response = await fetch('https://api.example.com/data'); // Додано await
  const data = await response.json(); // Додано await
  console.log(data);
}

fetchData();

Промпт #4: Логічні помилки

Сценарій: Код працює, але результат неправильний.

Моя функція має повертати суму всіх парних чисел у масиві, але результат неправильний. Ось код:

function sumEvenNumbers(arr) {
  let sum = 0;
  for (let i = 0; i <= arr.length; i++) {
    if (arr[i] % 2 === 0) {
      sum += arr[i];
    }
  }
  return sum;
}

console.log(sumEvenNumbers([1, 2, 3, 4, 5, 6])); // Очікую 12, але отримую NaN

Знайди логічну помилку та поясни, чому виникає NaN.

Ключові моменти:

  • Опис очікуваної поведінки
  • Фактичний результат
  • Повний код

Виправлення:

function sumEvenNumbers(arr) {
  let sum = 0;
  for (let i = 0; i < arr.length; i++) { // Змінено <= на <
    if (arr[i] % 2 === 0) {
      sum += arr[i];
    }
  }
  return sum;
}

console.log(sumEvenNumbers([1, 2, 3, 4, 5, 6])); // 12

Пояснення: Помилка в умові циклу (i <= arr.length замість i < arr.length), що призводить до спроби доступу до неіснуючого елемента.

Промпт #5: Помилки в DOM-маніпуляціях

Сценарій: Код не змінює елементи на сторінці.

Мій код має змінити текст кнопки, але нічого не відбувається. Ось HTML та JavaScript:

HTML:
<button id="myButton">Click me</button>

JavaScript:
const button = document.getElementById('myBtn');
button.textContent = 'Clicked!';

Знайди помилку та поясни, як правильно працювати з DOM.

Що важливо:

  • HTML-структура
  • JavaScript-код
  • Опис проблеми

Виправлення:

const button = document.getElementById('myButton'); // Виправлено ID
button.textContent = 'Clicked!';

Пояснення: ID в HTML - myButton, а в JavaScript - myBtn. Невідповідність призводить до того, що button стає null.

Техніки діалогового дебагінгу

Техніка 1: Поетапне уточнення

Якщо AI не зрозумів проблему з першого разу, уточнюйте:

  1. Перший промпт: Опишіть проблему загально
  2. Другий промпт: Додайте більше контексту (версія браузера, бібліотеки)
  3. Третій промпт: Запитайте про конкретний аспект

Техніка 2: Прохання про альтернативи

Ти виправив мій код, але чи є інший, більш ефективний спосіб вирішити цю задачу? Покажи альтернативний підхід.

Техніка 3: Навчання на помилках

Поясни, чому моя помилка - типова для початківців, та дай поради, як уникнути подібних помилок у майбутньому.

Техніка 4: Перевірка розуміння

Я виправив код згідно з твоїми порадами. Чи можеш ти перевірити, чи правильно я зрозумів твоє пояснення? Ось мій виправлений код: [код]

Поради для ефективного AI-дебагінгу

1. Копіюйте точний текст помилки

Завжди копіюйте повне повідомлення про помилку з консолі, включаючи номер рядка.

2. Надавайте контекст

Вказуйте, де виконується код (браузер, Node.js), які бібліотеки використовуються.

3. Показуйте повний код

Не обмежуйтеся лише рядком з помилкою - показуйте всю функцію або блок коду.

4. Описуйте очікувану поведінку

Чітко формулюйте, що має робити код.

5. Просіть пояснення

Не лише виправлення, але й пояснення причини помилки.

Типові помилки та як їх уникнути

Помилка 1: Неповний код

Погано: "Мій код не працює: console.log(x);"

Добре: "Мій код видає ReferenceError. Ось повний код: [повний код з оголошенням змінних та викликами функцій]"

Помилка 2: Відсутність тексту помилки

Завжди копіюйте точний текст помилки з консолі.

Помилка 3: Ігнорування контексту

Вказуйте, де виконується код та які інструменти використовуються.

Практичні кейси

Кейс 1: Помилка в циклі

Проблема: Нескінченний цикл.

Промпт:

Мій цикл while працює нескінченно та зависає браузер. Ось код:

let i = 0;
while (i < 10) {
  console.log(i);
}

Знайди помилку та поясни, як правильно використовувати while.

Виправлення: Відсутній інкремент i++ всередині циклу.

Кейс 2: Помилка в event listener

Проблема: Обробник події не спрацьовує.

Промпт:

Мій обробник кліку не спрацьовує. Ось код:

document.getElementById('btn').addEventListener('click', handleClick());

function handleClick() {
  alert('Clicked!');
}

Що не так? Поясни, як правильно додавати event listener.

Виправлення: handleClick() викликає функцію одразу. Потрібно handleClick без дужок.

Висновок

Діалоговий дебагінг з AI - це потужний інструмент для навчання та швидкого виправлення помилок. Ключ до успіху - детальні промпти з повним кодом, точним текстом помилки та описом очікуваної поведінки.

Основні takeaways:

  1. Завжди копіюйте точний текст помилки
  2. Показуйте повний код, а не фрагменти
  3. Описуйте контекст виконання
  4. Просіть пояснення, а не лише виправлення
  5. Використовуйте діалог для уточнення

Тепер ви готові ефективно виправляти помилки за допомогою AI! Експериментуйте та навчайтеся на своїх помилках.