intDataBlog
← ЖурналМаршруты обучения ↗

От первой функции к проверяемому коду

Опишите контракт функции, проверьте границы и оцените подсказку ИИ.

Практика рассчитана на отдельную учебную среду и вымышленные данные.

Первый код

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

Функция получает вход, выполняет преобразование и возвращает результат или явно описанную ошибку. Начните с примера: список цен превращается в итоговую сумму. Уточните пустой список, неверное значение и единицы измерения. Такая запись контракта полезнее раннего выбора фреймворка: она показывает, какую задачу должен решать код.

  • Типы и значения
  • Условия и функции
  • Отладка

Попробуйте

  1. Для массива ["Кот", "Книга", "Сад"] напишите функцию поиска по подстроке без учёта регистра.
  2. Проверьте запрос «к», запрос «САД» и пустую строку.
  3. Заранее решите, должен ли пустой запрос возвращать все записи.

Для «к» получаются «Кот» и «Книга»; «САД» находит «Сад»; пустой ввод имеет записанное правило.

Почему тестировать только один пример мало?

Он не проверяет регистр, отсутствие совпадений, пустой ввод и неверный тип данных.

Продолжить на русском и английском
  • Ваш первый сайт RU ↗

    Сделайте страницу с заголовком, списком и ссылкой. Чтение открыто; для практики нужен редактор и браузер.

  • Your first website EN ↗

    Build a small first page. Открытые материалы; редактор и браузер для практики.

  • Первые шаги JavaScript RU ↗

    Переменные, условия, циклы и функции. Онлайн-чтение открыто; электронная книга продаётся отдельно.

  • JavaScript Fundamentals EN ↗

    Hello World, variables, loops, functions. Онлайн-чтение открыто.

Алгоритмы

Сначала задайте вход и ожидаемый результат, затем последовательность шагов. Выбирайте структуру данных по задаче и объясняйте стоимость решения.

Алгоритм — воспроизводимый порядок действий. Линейный поиск просматривает элементы по очереди; двоичный поиск сокращает область, но требует упорядоченных данных. Сначала докажите корректность на маленьком примере, затем оцените, как растёт число операций с объёмом входа. Быстрая неправильная программа не становится полезной из-за хорошей сложности.

  • Массив и множество
  • Поиск и сортировка
  • Оценка сложности

Попробуйте

  1. Уберите повторы из [3,1,3,2], сохраняя первое появление.
  2. Опишите решение с множеством seen и результирующим массивом.
  3. Проверьте [] и [1,1] и сравните с вложенным поиском в массиве.

Результаты: [3,1,2], [], [1]; объяснена линейная обработка и дополнительная память.

Почему сортировка не всегда подходит для удаления повторов?

Она меняет порядок и добавляет собственную стоимость; условие может требовать сохранить порядок.

Продолжить на русском и английском
  • Первые шаги JavaScript RU ↗

    Переменные, условия, циклы и функции. Онлайн-чтение открыто; электронная книга продаётся отдельно.

  • JavaScript Fundamentals EN ↗

    Hello World, variables, loops, functions. Онлайн-чтение открыто.

  • JavaScript: Hello World EN ↗

    Верните ожидаемую строку и запустите проверки упражнения. Бесплатный проект; для участия и отправки решений нужен аккаунт.

Проектирование API

Контракт API описывает запрос, успешный ответ и ошибки так, чтобы клиент мог на них опереться. Не смешивайте отсутствие записи, неверный ввод и отсутствие доступа.

Контракт API включает формат, ограничения и смысл результата. Для операции создания задачи определите обязательные поля, допустимые значения, статус успеха и понятную ошибку. Отдельно решите, что означает повтор. Схема JSON проверяет структуру, но сама по себе не доказывает право пользователя выполнить действие.

  • Ресурс и метод
  • Схема и валидация
  • Ошибки и совместимость

Попробуйте

  1. Опишите GET /books/7: id number, title string.
  2. Для отсутствующей книги задайте 404 и стабильное тело ошибки.
  3. Для POST /books перечислите обязательные поля и ответ на пустое title.

У запроса и ответа согласованы типы; описан отдельный ответ для неверного ввода.

Можно ли незаметно изменить id из числа в строку?

Для существующего клиента это может нарушить контракт; совместимость нужно оценить и проверить отдельно.

Продолжить на русском и английском
  • Обзор HTTP RU ↗

    Запрос, ответ, метод, статус и заголовки. Чтение открыто; собственные запросы выполняйте к учебному сервису.

  • An overview of HTTP EN ↗

    Trace one request in browser DevTools. Открытая документация.

  • Full Stack Open EN ↗

    Часть 0: изучите запросы и ответы веб-приложения. Материалы открыты; к основным частям переходите после базы JavaScript.

Проверки кода

Тест должен сравнивать поведение с независимым ожиданием. Если ожидание повторяет тот же ошибочный алгоритм, тест не защищает от регрессии.

Хорошая проверка сравнивает наблюдаемый результат с независимым ожиданием. Для функции суммы подготовьте обычный, пустой и неверный вход; явно решите, что является ошибкой. Не повторяйте текст реализации в ожидаемом результате: такая проверка может согласиться с той же ошибкой. После исправления повторите именно затронутый сценарий.

  • Вход и ожидание
  • Граничные случаи
  • Регрессия

Попробуйте

  1. Для функции поиска из первого упражнения напишите ожидания до запуска.
  2. Проверьте обычный запрос, отсутствие совпадений и пустой ввод.
  3. Внесите учебную ошибку регистрозависимости и убедитесь, что соответствующая проверка её замечает.

Есть проверка, которая падает при конкретной ошибке и проходит после исправления.

Почему проверка «функция не упала» недостаточна?

Она не подтверждает корректность результата, порядок данных или обработку границ.

Продолжить на русском и английском
  • JavaScript: Hello World EN ↗

    Верните ожидаемую строку и запустите проверки упражнения. Бесплатный проект; для участия и отправки решений нужен аккаунт.

  • Первые шаги JavaScript RU ↗

    Переменные, условия, циклы и функции. Онлайн-чтение открыто; электронная книга продаётся отдельно.

  • Full Stack Open EN ↗

    Часть 0: изучите запросы и ответы веб-приложения. Материалы открыты; к основным частям переходите после базы JavaScript.

Работа с ИИ в коде

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

Относитесь к предложенному коду как к изменению от незнакомого автора. Прочитайте входы, выходы и побочные действия, сопоставьте с контрактом, затем запустите проверку. Красивое объяснение модели не заменяет результат программы. Давайте помощнику небольшой контекст без ключей и персональных данных; сохраняйте решение об изменении за человеком.

  • Ограниченный запрос
  • Проверка допущений
  • Независимые тесты

Попробуйте

  1. Сформулируйте запрос на функцию поиска с вымышленным массивом книг и правилами пустого ввода.
  2. Разберите возможный ответ, который игнорирует регистр только с одной стороны.
  3. Примените независимые примеры из темы тестирования и отметьте неподтверждённые допущения.

Есть уточнённое требование и проверка смешанного регистра; доверие к объяснению не заменяет тест.

Если ИИ сказал «тесты проходят», можно ли считать проверку выполненной?

Нет. Нужны реально запущенные проверки в вашей среде и понимание их результатов.

Продолжить на русском и английском
  • Первые шаги JavaScript RU ↗

    Переменные, условия, циклы и функции. Онлайн-чтение открыто; электронная книга продаётся отдельно.

  • JavaScript Fundamentals EN ↗

    Hello World, variables, loops, functions. Онлайн-чтение открыто.

  • JavaScript: Hello World EN ↗

    Верните ожидаемую строку и запустите проверки упражнения. Бесплатный проект; для участия и отправки решений нужен аккаунт.

Поиск, который пропускает книги

Выберите исправление по входам, результатам и независимым проверкам. Это вымышленный учебный сценарий.

1. Воспроизведите

books = ["Кот", "Книга", "Сад"]
query = "К"
expected = ["Кот", "Книга"]
actual = []

Какой пример полезнее всего первым?

2. Выберите условие

Поиск должен игнорировать регистр.
Входы в этой задаче — строки.

Как сравнивать?

3. Проверьте границу

Пустой запрос по требованию показывает все книги.

Какой ожидаемый результат нужен тесту?