Занятие 5 / 5 · Университет
Проверка кода с ИИ: пустой массив и неверный тип
Задайте контракт функции, найдите два дефекта на четырёх тестах и сохраните отчёт проверки.
Функция вычисляет среднее для [2, 4] и возвращает 3. Этого мало: что она делает с пустым массивом, единственным нулём и строкой вместо числа? Разберём специально составленный ошибочный пример — это не цитата из конкретного ИИ-сервиса.
Нужны базовые представления о массиве, функции и среднем арифметическом. Пример работает без аккаунта в ИИ; сверяйте использование помощника с правилами своего курса.
Твой маршрут
- До запуска запишите ожидаемые результаты: [2,4] → 3; [0] → 0; [] → нет данных; ["3",5] → ошибка входа.
- Запустите четыре проверки для версии с ошибками. Найдите два случая, в которых результат не совпал с контрактом.
- Выберите исправленную версию и повторите те же проверки. Посмотрите код: тип проверяется отдельно от пустоты.
- Скачайте отчёт. Придумайте ещё один случай, сначала рассчитайте ожидаемый ответ вручную и объясните, какую ошибку он может обнаружить.
Лаборатория граничных случаев
Проверяем две готовые функции на одних и тех же синтетических входах. Значения берутся из примеров, ваши учебные данные не запрашиваются.
| Вход | Ожидаем | Получено | Проверка |
|---|
Сначала запиши ожидаемые ответы, затем запусти проверки.
Код с ошибками
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.