Практика рассчитана на отдельную учебную среду и вымышленные данные.
Первый код
Функция превращает входные данные в результат по явному правилу. Начинайте с небольшого примера, где можно вручную проверить каждую строку.
Функция получает вход, выполняет преобразование и возвращает результат или явно описанную ошибку. Начните с примера: список цен превращается в итоговую сумму. Уточните пустой список, неверное значение и единицы измерения. Такая запись контракта полезнее раннего выбора фреймворка: она показывает, какую задачу должен решать код.
- Типы и значения
- Условия и функции
- Отладка
Попробуйте
- Для массива ["Кот", "Книга", "Сад"] напишите функцию поиска по подстроке без учёта регистра.
- Проверьте запрос «к», запрос «САД» и пустую строку.
- Заранее решите, должен ли пустой запрос возвращать все записи.
Для «к» получаются «Кот» и «Книга»; «САД» находит «Сад»; пустой ввод имеет записанное правило.
Почему тестировать только один пример мало?
Он не проверяет регистр, отсутствие совпадений, пустой ввод и неверный тип данных.
Продолжить на русском и английском
- Ваш первый сайт RU ↗
Сделайте страницу с заголовком, списком и ссылкой. Чтение открыто; для практики нужен редактор и браузер.
- Your first website EN ↗
Build a small first page. Открытые материалы; редактор и браузер для практики.
- Первые шаги JavaScript RU ↗
Переменные, условия, циклы и функции. Онлайн-чтение открыто; электронная книга продаётся отдельно.
- JavaScript Fundamentals EN ↗
Hello World, variables, loops, functions. Онлайн-чтение открыто.
Алгоритмы
Сначала задайте вход и ожидаемый результат, затем последовательность шагов. Выбирайте структуру данных по задаче и объясняйте стоимость решения.
Алгоритм — воспроизводимый порядок действий. Линейный поиск просматривает элементы по очереди; двоичный поиск сокращает область, но требует упорядоченных данных. Сначала докажите корректность на маленьком примере, затем оцените, как растёт число операций с объёмом входа. Быстрая неправильная программа не становится полезной из-за хорошей сложности.
- Массив и множество
- Поиск и сортировка
- Оценка сложности
Попробуйте
- Уберите повторы из [3,1,3,2], сохраняя первое появление.
- Опишите решение с множеством seen и результирующим массивом.
- Проверьте [] и [1,1] и сравните с вложенным поиском в массиве.
Результаты: [3,1,2], [], [1]; объяснена линейная обработка и дополнительная память.
Почему сортировка не всегда подходит для удаления повторов?
Она меняет порядок и добавляет собственную стоимость; условие может требовать сохранить порядок.
Продолжить на русском и английском
- Первые шаги JavaScript RU ↗
Переменные, условия, циклы и функции. Онлайн-чтение открыто; электронная книга продаётся отдельно.
- JavaScript Fundamentals EN ↗
Hello World, variables, loops, functions. Онлайн-чтение открыто.
- JavaScript: Hello World EN ↗
Верните ожидаемую строку и запустите проверки упражнения. Бесплатный проект; для участия и отправки решений нужен аккаунт.
Проектирование API
Контракт API описывает запрос, успешный ответ и ошибки так, чтобы клиент мог на них опереться. Не смешивайте отсутствие записи, неверный ввод и отсутствие доступа.
Контракт API включает формат, ограничения и смысл результата. Для операции создания задачи определите обязательные поля, допустимые значения, статус успеха и понятную ошибку. Отдельно решите, что означает повтор. Схема JSON проверяет структуру, но сама по себе не доказывает право пользователя выполнить действие.
- Ресурс и метод
- Схема и валидация
- Ошибки и совместимость
Попробуйте
- Опишите GET /books/7: id number, title string.
- Для отсутствующей книги задайте 404 и стабильное тело ошибки.
- Для POST /books перечислите обязательные поля и ответ на пустое title.
У запроса и ответа согласованы типы; описан отдельный ответ для неверного ввода.
Можно ли незаметно изменить id из числа в строку?
Для существующего клиента это может нарушить контракт; совместимость нужно оценить и проверить отдельно.
Продолжить на русском и английском
- Обзор HTTP RU ↗
Запрос, ответ, метод, статус и заголовки. Чтение открыто; собственные запросы выполняйте к учебному сервису.
- An overview of HTTP EN ↗
Trace one request in browser DevTools. Открытая документация.
- Full Stack Open EN ↗
Часть 0: изучите запросы и ответы веб-приложения. Материалы открыты; к основным частям переходите после базы JavaScript.
Проверки кода
Тест должен сравнивать поведение с независимым ожиданием. Если ожидание повторяет тот же ошибочный алгоритм, тест не защищает от регрессии.
Хорошая проверка сравнивает наблюдаемый результат с независимым ожиданием. Для функции суммы подготовьте обычный, пустой и неверный вход; явно решите, что является ошибкой. Не повторяйте текст реализации в ожидаемом результате: такая проверка может согласиться с той же ошибкой. После исправления повторите именно затронутый сценарий.
- Вход и ожидание
- Граничные случаи
- Регрессия
Попробуйте
- Для функции поиска из первого упражнения напишите ожидания до запуска.
- Проверьте обычный запрос, отсутствие совпадений и пустой ввод.
- Внесите учебную ошибку регистрозависимости и убедитесь, что соответствующая проверка её замечает.
Есть проверка, которая падает при конкретной ошибке и проходит после исправления.
Почему проверка «функция не упала» недостаточна?
Она не подтверждает корректность результата, порядок данных или обработку границ.
Продолжить на русском и английском
- JavaScript: Hello World EN ↗
Верните ожидаемую строку и запустите проверки упражнения. Бесплатный проект; для участия и отправки решений нужен аккаунт.
- Первые шаги JavaScript RU ↗
Переменные, условия, циклы и функции. Онлайн-чтение открыто; электронная книга продаётся отдельно.
- Full Stack Open EN ↗
Часть 0: изучите запросы и ответы веб-приложения. Материалы открыты; к основным частям переходите после базы JavaScript.
Работа с ИИ в коде
ИИ полезен как помощник для объяснений и вариантов, а ответственность за контракт и проверку остаётся у разработчика. Не отправляйте секреты или пользовательские данные ради учебного примера.
Относитесь к предложенному коду как к изменению от незнакомого автора. Прочитайте входы, выходы и побочные действия, сопоставьте с контрактом, затем запустите проверку. Красивое объяснение модели не заменяет результат программы. Давайте помощнику небольшой контекст без ключей и персональных данных; сохраняйте решение об изменении за человеком.
- Ограниченный запрос
- Проверка допущений
- Независимые тесты
Попробуйте
- Сформулируйте запрос на функцию поиска с вымышленным массивом книг и правилами пустого ввода.
- Разберите возможный ответ, который игнорирует регистр только с одной стороны.
- Примените независимые примеры из темы тестирования и отметьте неподтверждённые допущения.
Есть уточнённое требование и проверка смешанного регистра; доверие к объяснению не заменяет тест.
Если ИИ сказал «тесты проходят», можно ли считать проверку выполненной?
Нет. Нужны реально запущенные проверки в вашей среде и понимание их результатов.
Продолжить на русском и английском
- Первые шаги JavaScript RU ↗
Переменные, условия, циклы и функции. Онлайн-чтение открыто; электронная книга продаётся отдельно.
- JavaScript Fundamentals EN ↗
Hello World, variables, loops, functions. Онлайн-чтение открыто.
- JavaScript: Hello World EN ↗
Верните ожидаемую строку и запустите проверки упражнения. Бесплатный проект; для участия и отправки решений нужен аккаунт.
Поиск, который пропускает книги
Выберите исправление по входам, результатам и независимым проверкам. Это вымышленный учебный сценарий.
1. Воспроизведите
books = ["Кот", "Книга", "Сад"]
query = "К"
expected = ["Кот", "Книга"]
actual = []Какой пример полезнее всего первым?
2. Выберите условие
Поиск должен игнорировать регистр.
Входы в этой задаче — строки.Как сравнивать?
3. Проверьте границу
Пустой запрос по требованию показывает все книги.Какой ожидаемый результат нужен тесту?