Это статья об основах программирования на Go. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением.
Хой, джедаи и амазонки!
Увидел на страничке ВК издательства АСТ такую иллюстрацию:
Решил написать код для реализации этой программы. Об этом сегодняшняя статья. А в конце - идея и концепция более продвинутой версии этой программы.
1. Что такое Хокку
Хокку (или хайку) – лирическое стихотворение, форма японской поэзии.
Если подходить строго, то хокку состоит не просто из трех строк: первый и последний стих (строка) хокку – пятисложные, а второй стих хокку – семисложный. Всего в хокку 17 слогов. Ниже пример хокку известного японского поэта:
Помните, как говорили про самураев - они и в оружии искусны, и стихи пишут, и дипломаты, и много ещё в чём преуспели. Вот - это не совсем те стихи, к которым мы привыкли. Ну разве что стихи Маяковского близки.
Переходим к разбору кода.
2. Принцип работы
Первое, что решил - вместо последней цифры лайка, буду использовать генерацию случайного числа. Это будет первая строка хокку.
Со второй и третьей строкой хокку всё понятно: вводим день и месяц рождения.
Что ещё интересного: храню строки в трёх массивах, каждый длиной 10.
Ещё из интересного: поскольку элементов в массиве 10, а количество дней в месяце и месяцев в году, больше 10, использовал лайфхак. После считывания с терминала даты рождения, брал её остаток от деления на десять:
var dayBirth int
fmt.Scan(&dayBirth)
dayBirth %= 10
Ещё решил стремиться к чистому коду. На данный момент для меня сложность - держать все мои функции в пределах 15 строк. В результате у меня получилось 7 функций, включая main. Хотя в одной функции строк получилось 24, но там обработка ошибок взяла прилично место.
3. Устройство массива
Для удобства чтения и редактирования кода, строки в массивах я хранил следующим образом:
Что здесь интересного: информацию записываем не в одну строку, записанную после фигурной скобки, а в отдельных строках кода. Ещё важно обращать внимание - ставить зпт после каждой строки, даже после последней.
Вопрос: что именно хранится в массивах?
Ответ: строки из произведений таких известных поэтов и писателей, как Афанасий Фет, Николай Гумилёв, Роберт Рождественский, Владимир Маяковский, Сергей Есенин, Роберт Бернс, Джон Толкин, Александр Пушкин, Фёдор Тютчев, Джордж Байрон, Евгений Евтушенко, Марина Цветаева, Александр Блок, Николай Некрасов и Анна Ахматова.
4. Архитектура
Пока я не знаком с архитектурой ЯП, но на интуитивном уровне расскажу, как устроил код и почему так.
- После пакета иморт я добавил констатой - длину трёх моих массивов. Далее эту константу использовал при объявлении массивов.
- В функции main создал бесконечный цикл, который прекращает генерировать хокку, когда пользователь сообщит об этом. Удобно - программа не требует повторного запуска, если хочешь сгенерировать несколько стихов.
- В этом бесконечном цикле, в самом начале прописал условие выхода из функции - это наглядно демонстрирует, когда цикл должен завершиться. Удобно.
- В функции main вызываю шесть других функций, которые между собой не общаются. Шесть функций вызываю, чтобы сократить длину этой функции, сделать её лаконичной.
- Есть три функции, в которых созданы массивы со строками произведений известных поэтов и выбираются какие строки будут в итоговом хокку.
- Есть функция, которая создаёт файл в случае его отсутствия и открывает его для записи. Записывает туда строки: удобно, может получиться интересное хокку, которое захочется перечитать. Благодаря этой функции, все хокку сохраняются в файл. Что можно улучшить: добавить лог с датой и временем создания хокку.
- Отдельная функция обработки информации после завершения хокку, которая даёт команду бесконечному циклу в функции main: завершить работу или повторить создание хокку.
- Есть функция печати хокку в терминал - чтобы результат сохранялся не только в файл, но и был сразу виден в IDE.
Графически это выглядит так:
Архитектуру я нарисовал за пять минут в редакторе mind-карт от Google.
5. Итоги
Сам код можно посмотреть на моём GitHub'e.
Ещё обещал поделиться идеей более продвинутого пет-проджекта на базе этой идеи. Суть в чём - в ВК есть генератор постов, результат его работы на пример ниже:
Хочу сделать такой же аналог. В чём его работа:
- Программа считывает текст с определённой веб-страницы. В частности, с частной страницы в соцсети.
- Выбирает текстовые фрагменты из разных записей и объединяет их.
- Рисует графику, создаёт jpeg-изображение.
Как поделились коллеги из чата SkillBox, тут два компонента:
- Спарсить исходник (со страницы ли, из чата ли), корректно выделив материал для работы (реплики одного человека, например, или цепь ответов на одно сообщение);
- Придумать и запрограммировать модель, которая будет собирать этот "афонаризм". Например, выбрать случайно первое слово, а следующие нанизывать, исходя из частоты встречаемости после предыдущего в исходнике (присыпать случайностью, чтоб не скучно было).
Ну и плюс интерфейс написать.
Ребята считают, что всё равно придётся дополнительный материалы искать, документацию читать. В курсе (Skillbox) не научат разбирать веб-страницу и дергать из неё текст, например; но это несложно освоить.
Успехов, бро!
--//--//--
Если захочешь купить курс от SkillBox, воспользуйся моей реферальной ссылкой. Ты получишь огромную скидку на курс и плюс в карму за помощь каналу.
Бро, ты уже здесь? 👉 Подпишись на канал для новичков «Войти в IT» в Telegram, будем изучать IT вместе 👨💻👩💻👨💻