Найти в Дзене
Я, Golang-инженер

#12. Функции и структуры

Оглавление

Это статья об основах программирования на 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 и т.д.).

Допустим, у нас есть координата крайнего севера, откуда экспедиция выходила на связь, после чего исчезла. Задача - рассчитать площадь участка для поисковых работ в виде площади круга.

Photo by Emma Smith on Unsplash
Photo by Emma Smith on Unsplash

У нас три переменных: широта и долгота места, а также радиус поисковых работ.

Полезно эти переменные объединить в структуру. Это позволит программисту, читающему код, понять что эти переменные описывают конкретный объект - область поисковых работ.

Предположим также, что подобная задача возникает в разных частях кода программы. Тогда будем ещё использовать отдельную функцию для расчёта. Ниже код программы:

Программа со структурой
Программа со структурой

Мы создали структуру SearchCircle с полями:

  • coordinateX;
  • coordinateY;
  • radiusSearch.

Функция circleArea использует только те данные структуры SearchCircle, что ей нужны для расчёта площади поисковых работ, площади круга. Т.е. могут быть другие функции, которые используют поля этой же структуры SearchCircle для расчёта других задач, например удалённость до центра поисковых работ. А вывод этой программы выглядит так:

Вывод программы в терминал
Вывод программы в терминал

В структурах есть много чего ещё интересного. Например, как можно менять аргументы в функции через указатели или как использовать методы, чтобы ещё упростить код для понимания. Поговорим об этом в другой раз.

Бро, ты уже здесь? 👉 Подпишись на канал «Я, Golang-инженер», будем изучать IT вместе 👨‍💻👩‍💻👨‍💻

Наука
7 млн интересуются