Функция с понятным договором: один вход, один результат.
Выделение функции полезно, когда её поведение можно проверить отдельно от чтения файла и печати ответа.
Сначала определить поведение
Пусть учебная функция разбирает текстовое количество. Договор: строка « 7 » даёт целое 7; «0» даёт 0; отрицательное число, пустая строка и слово считаются ошибкой входа. Число 7 и текст «7» — разные представления, поэтому место преобразования должно быть явным. До реализации составьте несколько пар «вход — ожидаемый исход» и уточните, разрешён ли ноль.
Отделить вычисление от окружения
Функция разбора не должна сама спрашивать путь к файлу или печатать весь отчёт. Её задача — вернуть количество либо сообщить об ожидаемой ошибке выбранным способом. Чтение файла вызывает её для каждой строки, а слой интерфейса решает, как показать ошибку пользователю. Такое разделение позволяет проверить правило на коротких строках без создания файлов и запуска всего приложения.
Увидеть границу переусложнения
Не нужно заранее строить универсальный конструктор правил для любых данных. Сначала достаточно ясного имени, входа, результата и небольшого числа ветвлений. Если функция и разбирает число, и обновляет таблицу, и сохраняет файл, разбейте обязанности. Проверка понимания: попросите ученика изменить допустимость нуля и назвать точные места изменения, сохранив остальные договорённости.