День 13 — задания
Практика прошла по ходу чтения — в блоках «Попробуйте сейчас». Здесь итог: всё, что сверит course check 13. Если какой-то пункт пропустили, вернитесь к странице, которая указана рядом. Список страниц:
course toc 131. Четыре предсказания — страницы 2, 3, 4
Сделать: сдать ответы на четыре вопроса «что выведет».
course answer day13.q1 ОТВЕТ
course answer day13.q2 ОТВЕТ
course answer day13.q3 ОТВЕТ
course answer day13.q4 ОТВЕТВместо ОТВЕТ — числа, как их напечатала бы программа: в q1 одно число, в q2 два числа через пробел, в q3 три числа через пробел, в q4 одно число с точкой. Можно отправить заново — засчитывается последний.
Готово, когда: пункты q1, q2, q3, q4 зелёные.
2. Таблица трассировки — страница 3
Сделать: заполните ~/gocourse/day13/read/table.txt — второй проход цикла программы read/program.go, тот, где trips равно 3. Шаги и номера строк уже стоят: меняйте только знаки ?, прочерки оставьте как есть. Формат — как в разобранной таблице первого прохода на странице 3.
Готово, когда: пункт trace зелёный.
3. Единицы измерения — страница 4
Сделать: почините ~/gocourse/day13/fixcall, чтобы итог считался в копейках. Правка — одно выражение в вызове; объявления и имена не трогайте. Лимит проверки тот же, что на странице 4: одна-две изменённые строки, больше двух пункт fixsmall не примет. Что поменяли, покажет diff ~/.course/orig/day13/fixcall/main.go ~/gocourse/day13/fixcall/main.go.
Готово, когда: пункты fixcall и fixsmall зелёные.
4. Снимки поведения — страница 5
Сделать: до всяких правок снимите три снимка вывода программы split и научитесь сверять:
cd ~/gocourse/day13/split
go run . < example.txt > baseline.txt
go run . < /dev/null > base-empty.txt
printf '50\n12шт\n' > bad.txt
go run . < bad.txt > base-bad.txt 2>&1
go run . < example.txt > after.txt
diff baseline.txt after.txtСнимки не переснимайте после правок — они для того и нужны, чтобы хранить прежнее поведение, в том числе на пустом вводе и на строке не с числом.
Готово, когда: пункты t_base, t_diff и base зелёные — base сверяет все три снимка.
5. Разложить split на функции — страница 5
Сделать: ~/gocourse/day13/split/main.go разложить на функции по условию ~/gocourse/day13/split/TASK.txt:
- не меньше трёх своих функций кроме
main, и каждая вызывается; - расчёт коробок и расчёт стоимости со скидкой в
mainне остаются — там от них остаётся только вызов; - тело
main— не больше 34 строк; комментарий-заголовок уезжает вместе со своим куском кода. Это не правило «функция не длиннее N строк» — такого правила в курсе нет (страница 1), а порог, которым проверка отличает разобранную программу от нетронутой: в заготовке телоmain— 38 строк; - вывод прежний, буква в букву, включая сообщение об ошибке, поток, в который оно идёт, и код возврата 1.
Готово, когда: пункты split, funcs, base, vet зелёные. Проверка прогонит программу на нескольких вводах; часть из них скрыта — на них вы увидите только ввод и то, что напечатала программа.
Пункты split, vet и code_fmt проверяют, что при разбиении ничего не сломалось, поэтому до самого разбиения они красные и отправляют к пункту funcs: пока расчёты не уехали из main, вывод «не менялся» сам собой, и засчитывать тут нечего.
6. Функция по описанию — страница 6
Сделать: в ~/gocourse/day13/report написать функцию discount по описанию из TASK.txt. Границы — сумма ровно на пороге, ноль, процент 0 — часть условия.
Готово, когда: пункт report зелёный. Проверка гоняет вашу функцию на своих числах, отдельно от main.
7. Коммиты — страница 5
Сделать: завести репозиторий в ~/gocourse/day13 и коммитить каждый шаг: стенд как есть, потом по коммиту на каждый вынесенный кусок и на report. Историю посмотреть через git log --oneline.
Готово, когда: пункты git (не меньше четырёх коммитов) и t_log зелёные.
8. Формат
Сделать: отформатируйте код split, fixcall и report — Ctrl+S в VS Code или gofmt -w . в папке задания.
Готово, когда: gofmt -l . в каждой папке ничего не печатает — пункт code_fmt зелёный. Он тоже про «не сломал»: зачёт идёт после того, как сделано задание 5, — до него пункт красный.
9. Словарик ошибок — страница 7
Сделать: в ~/errors.md — минимум двадцать шесть строк вида «текст ошибки — что значило». Между ошибкой и разбором — тире с пробелами вокруг; проверка считает только такие строки, а не все подряд.
Готово, когда: пункт errors зелёный.
10. Звёздочка
В зачёт не входит, course check 13 эти задания не смотрит.
- Вынесите в
splitчетвёртую функцию — печать строки заказа (printOrder). Насколько короче сталmainи стало ли понятнее? - В
read/program.goпоставьте курсор наperTripв строке 12 и нажмитеShift+F12: сколько мест вызывают эту функцию? Потом переименуйте её черезF2вperTripLoad— редактор поменяет имя и в объявлении, и во всех вызовах. Верните обратно тем же способом. - Напишите в
scratchфункциюpallets(boxes, perPallet int) intсо страницы 6 и проверьте её четырьмя вызовами изmain. Потом сломайте её нарочно (boxes/perPallet + 1) и посмотрите, какие из четырёх примеров это поймают, а какие нет. - Попробуйте в
splitпередать данные через пакетную переменную вместо аргументов — и верните обратно. Что стало труднее прочитать?
Готово, когда: вывод split по-прежнему совпадает с baseline.txt после всех опытов.
Порог: 15 пунктов из 18. После зачёта — контрольные вопросы: course quiz 13.