Это статья об основах программирования на Golang. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением.
Хой, джедаи и амазонки! В этой статье сделаю конспект по функциям и структурам.
Функции
Функция - набор операторов, выполняющих определённую задачу.
Функция полезна, когда в разных частях программы нужно вызывать один и тот же набор операторов. Ключевая фраза - "в разных частях программы", т.к. если бы это была одна часть программы, логичнее воспользоваться циклом, а не функцией.
Ещё напомню, что операторы бывают арифметическими, операторы сравнения, логические и другие.
Приведу пример, где в функции main вызывается функция по расчёту значения в ряду Фибоначчи по порядковому номеру числа в этом ряду. Функция принимает один параметр в виде натурального числа и выполняет следующую задачу:
- Подсчитывает, какое значение имеет параметр в качестве порядкового номера в ряду Фибоначчи;
- Возвращает значение порядкового номера в ряду.
Пример для наглядности
Ряд Фибоначчи: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711... и т.д.
Если на входе имеем параметр 7, то функция вернёт 13.
Далее программа
Функция расчёта ряда Фибоначчи (выделена рамкой) технически может вызываться в разных местах программы. Полезно не повторно писать этот код, а ссылаться на функцию fibonacci. Вывод программы выглядит так:
Ещё отмечу, что Р. Мартин в своей книге "Чистый код" рекомендует делать короткие функции, которые выполняют одну конкретную задачу.
Структуры
Когда в программе много разрозненных переменных, сложно понять, что делает программа и учащаются ошибки. Если несколько переменных относятся к одному объекту, полезно объединить их в структуру.
Объектом может быть описание человека (пол, возраст, язык и т.д.);
описание геометрической фигуры (координаты центра круга по XYZ, радиус);
адрес (дом, улица, город, страна, индекс, квартира, подъезд).
Структура - тип данных с набором полей, которые содержат атрибуты объекта. Структура может объединять разные типы данных (int, string, float и т.д.).
Допустим, у нас есть координата крайнего севера, откуда экспедиция выходила на связь, после чего исчезла. Задача - рассчитать площадь участка для поисковых работ в виде площади круга.
У нас три переменных: широта и долгота места, а также радиус поисковых работ.
Полезно эти переменные объединить в структуру. Это позволит программисту, читающему код, понять что эти переменные описывают конкретный объект - область поисковых работ.
Предположим также, что подобная задача возникает в разных частях кода программы. Тогда будем ещё использовать отдельную функцию для расчёта. Ниже код программы:
Мы создали структуру SearchCircle с полями:
- coordinateX;
- coordinateY;
- radiusSearch.
Функция circleArea использует только те данные структуры SearchCircle, что ей нужны для расчёта площади поисковых работ, площади круга. Т.е. могут быть другие функции, которые используют поля этой же структуры SearchCircle для расчёта других задач, например удалённость до центра поисковых работ. А вывод этой программы выглядит так:
В структурах есть много чего ещё интересного. Например, как можно менять аргументы в функции через указатели или как использовать методы, чтобы ещё упростить код для понимания. Поговорим об этом в другой раз.
Бро, ты уже здесь? 👉 Подпишись на канал «Я, Golang-инженер», будем изучать IT вместе 👨💻👩💻👨💻