Методы добавляют поведение структурам и позволяет ассоциировать функцию со структурой.
На прошлом уроке мы разобрались как использовать указатели для оптимизации производительности программы.
В этом уроке посмотрим на методы и как они применяются для написания читабельного и понятного кода.
Метод
По сути метод — это функция, которая принадлежит структуре.
Прежде чем посмотреть как пишутся методы, давайте вспомним наш предыдущий урок по структурам.
На одном из предыдущих занятий при рассмотрении структур, мы использовали пример дома House.
Теперь допустим, что нам необходима функция для предоставления информации по дому.
Первый способ — написать обычную функцию, которая принимает аргумент типа House и собирает необходимую информацию из этой переменной и отдает ее в виде строки. Назовем эту функцию Info.
На 12 строке мы определяем функцию Info, которая выполняет нужные действия.
Так как эта функция работает только с нашей структурой дома и использует ее данные, то было бы удобно каким-то образом зафиксировать принадлежность этой функции к структуре House. Это позволит локализовать определенные действия в программе поближе к структуре. Другой человек, читающий нашу программу может быстро определить, что функция Info привязана к структуре House и предоставляет информацию по этой структуре.
https://goplay.space/#z2hsmPo69M7
Обратите внимание, что на 12 строке после ключевого слова func появилась дополнительная секция:
(h House)
Эта секция называется приемником (receiver)
Фактически, мы вынесли определение аргумента функции Info в отдельный блок. Таким образом мы фиксируем, что это метод, принадлежащий структуре House.
На 24 строке вместо вызова функции мы вызываем метод с помощью выражения:
h.Info()
Программа работает также, как и предыдущий вариант, но теперь явным способом показываем, что функция Info - это метод структуры House.
Метод String
Напоследок познакомимся с отдельным методом String, который позволяет с помощью функции Println выводить на экран информацию по структуре. Если у структуры объявить метод String, то функция Println будет использовать его для вывода информации вместо стандартного способа по умолчанию. Давайте посмотрим как работает вывод на экран, если не определить метод String.
Как видим выводится строка:
{1 2020}
Не очень понятно какое значение относится к какому свойству структуры.
Для повышения читаемости и удобства отладки существует метод String. Он должен возвращать строку, которую Println и будет выводить на экран.
На 12 строке мы также, как и в случае метода Info определяем новый метод String. Теперь этот метод вызывается при передаче объекта структуры House в функцию Println. Вызывается он неявно.
Итоги
Методы позволяют структурировать программу таким образом, чтобы функции, принимающие непосредственное участие при обработке свойств структуры, принадлежали этой структуре.
Несколько фактов для запоминания:
- Структура может иметь несколько методов. Их количество неограниченно
- Название переменной приемника лучше сохранять одинаковым во всех методах данной структуры для поддержания консистентности программы
- Объект структуры копируется при вызове метода этой структуры
На следующем занятии разберемся с циклами.