Найти тему
Nikolay Lobkov

Сеттеры и геттеры в Godot

Оглавление

В языке GDScript есть такие понятия как сеттер и геттер. Что это такое и как это использовать?

Сеттер и геттер – это функции, которые срабатывают при взаимодействии с переменной. Сеттер срабатывает, когда задаётся значение у переменной, а геттер - когда нужно получить значение из переменной.

При получении значения из переменной вызывается функция, назначенная в качестве геттера. Эта функция должна возвращать какое-либо значение. А при изменении значения переменной, срабатывает функция, назначенная в качестве сеттера. Такая функция не должна ничего возвращать.

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

Если в функции, назначенной в качестве сеттера, не задаётся значение переменной, сеттером которой и назначена эта же самая функция, то значение переменной не изменится.

В версиях Godot ранее 4.0 сеттеры и геттеры не будут работать, если вы взаимодействуйте с переменной из одного и того же скрипта. Также там нельзя назначить лишь один геттер у переменной, обязательно должен присутствовать сеттер.

Как задать сеттер и геттер переменной?

Для примера создадим переменную variable, значение которой будет равняться одному.

-2

Задать сеттер и геттер в Godot 4.0 и новее можно двумя способами.

Первый способ – использование встроенных функций.

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

В set обязательно должен быть один аргумент, и функция, как я уже говорил, не должна ничего возвращать.

В get не должно быть аргументов, в нём даже скобочек быть не должно, двоеточие сразу после get. Как я уже говорил, геттер обязательно должен возвращать какое-либо значение.

-3

Этот способ удобен тем, что не нужно создавать отдельные функции, о чём и будет рассказываться во втором способе.

Второй способ – использование отдельных функций.

Вы можете создать отдельные функции для сеттера и геттера и ссылаться на них уже внутри переменной. Для этого создайте функции для сеттера и геттера:

-4

Далее, после значения переменной добавьте двоеточие, как и в первом способе. После чего вы можете задать значения у set и get на Callable ваших функций (вписать названия функций без скобочек и аргументов).

-5

Не забудьте поставить запятую после первого значения.

В версиях Godot старше 4.0 есть только один способ создания сеттеров и геттеров, он похож на второй способ реализации из версий новее.

В этих версиях есть такой оператор как setget, именно с помощью него можно задать сеттер и геттер. Создайте функции для сеттера и геттера:

-6

Способ реализации сеттера и геттера:

-7

Обратите внимание, что ранее было сказано, что сеттер и геттер не будут работать, если взаимодействие с переменной происходило в том же скрипте, что и переменная. Такого нет в версиях 4.0 и позднее. Если вы хотите пользоваться сеттерами и геттерами в одном скрипте с переменной, то пользуйтесь функциями, которые назначены сеттерами и геттерами.

Примеры использования

Здесь показаны примеры использования сеттеров и геттеров:

Выводит "setted" при изменении значения переменной, а "getted" - при получении.
Выводит "setted" при изменении значения переменной, а "getted" - при получении.
Излучает сигнал var_setted при изменении значения переменной.
Излучает сигнал var_setted при изменении значения переменной.
Проигрывает аудио при изменении значения переменной. Само значение остаётся прежним.
Проигрывает аудио при изменении значения переменной. Само значение остаётся прежним.
Возвращает позицию текущей камеры.
Возвращает позицию текущей камеры.