Занятие 5 / 5 · Университет

Проверка кода с ИИ: пустой массив и неверный тип

Задайте контракт функции, найдите два дефекта на четырёх тестах и сохраните отчёт проверки.

Функция вычисляет среднее для [2, 4] и возвращает 3. Этого мало: что она делает с пустым массивом, единственным нулём и строкой вместо числа? Разберём специально составленный ошибочный пример — это не цитата из конкретного ИИ-сервиса.

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

Твой маршрут

  1. До запуска запишите ожидаемые результаты: [2,4] → 3; [0] → 0; [] → нет данных; ["3",5] → ошибка входа.
  2. Запустите четыре проверки для версии с ошибками. Найдите два случая, в которых результат не совпал с контрактом.
  3. Выберите исправленную версию и повторите те же проверки. Посмотрите код: тип проверяется отдельно от пустоты.
  4. Скачайте отчёт. Придумайте ещё один случай, сначала рассчитайте ожидаемый ответ вручную и объясните, какую ошибку он может обнаружить.

Лаборатория граничных случаев

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

Ожидаемый и фактический результат
ВходОжидаемПолученоПроверка

Сначала запиши ожидаемые ответы, затем запусти проверки.

Код с ошибками
function faultyMean(values) {
  if (!values.length) return {status: 'ok', mean: 0};
  return {status: 'ok', mean: values.reduce((sum, x) => sum + x, 0) / values.length};
}
Код с проверками
function checkedMean(values) {
  if (!Array.isArray(values) || !values.every(Number.isFinite)) return {status: 'invalid', mean: null};
  if (!values.length) return {status: 'no_data', mean: null};
  const sum = values.reduce((total, value) => total + value, 0);
  if (!Number.isFinite(sum)) return {status: 'out_of_range', mean: null};
  return {status: 'ok', mean: sum / values.length};
}

Контракт этого упражнения: обычный массив из JSON. Number.isFinite не превращает строку в число и отклоняет NaN и Infinity. Пустой массив проверяется отдельно. Очень большая сумма может выйти за диапазон Number — для неё есть out_of_range. Десятичная арифметика JavaScript имеет погрешность; эта учебная функция не заменяет численную библиотеку.

Где поможет ИИ

Сначала опиши правило и свою проверку. Промпт можно обсудить с помощником; кнопка ниже только копирует текст и ничего не отправляет.

ИИ

Я подготовил промпт. Прочитайте его и при необходимости измените под свою задачу. Ничего не скачивается.

Помоги проверить учебную функцию среднего для массива из JSON. Контракт: только конечные числа без преобразования строк; пустой массив — status=no_data и mean=null; неверный тип — status=invalid и mean=null; [0] — status=ok и mean=0. Для корректных непустых входов вычисли среднее. Если сумма вышла за конечный диапазон Number, верни out_of_range. Сначала составь таблицу тестов [2,4], [0], [], ["3",5], затем объясни исправление. Не называй четыре теста доказательством отсутствия всех ошибок. Расскажи об ограничениях точности чисел JavaScript.

Измени условие

Новый случай: [-2, 2, 6]. Сначала вычислите среднее и укажите ожидаемый status, затем предложите тест для неправильного типа. Для практики на своём компьютере используйте правила и среду своего курса. Эта страница не запускает ваш произвольный код.

Что показать в конце

Контракт входа, отчёт четырёх тестов и собственный контрпример с объяснением. Добавьте проверку функции расчёта к своему университетскому мини-проекту.

Проверь себя и отметь шаги

Вопрос проверяется автоматически. Четыре отметки — ваша самопроверка, не независимая оценка знаний.

Чем [] отличается от [0] по нашему контракту?

Учебный пример Stack Active · 18.10.2026. Техническая справка: MDN.