GDScript Book #2, Переменные, типы данных и логика

Назад в "Основы GDScript"

Всем привет. Это уже второй урок из курса GDScript Book. И сегодня мы с вами поговорим о переменных и типах данных.

Объявление переменной.



Если вы читали предыдущую статью, то знаете что объявлять новые переменные можно в любом месте скрипта. Само же объявление осуществляется таким вот образом:

var [Имя переменной]

Очень похоже на JavaScript :). Причём на данном этапе вам не обязательно сразу же присваивать переменной значение, если этого не требует ваш алгоритм, скрипт будет оставаться корректным. Если же вам требуется значение уже на этапе объявления, то вы можете его проинициализировать. Выглядеть это будет так.

var [Имя переменной] = [Значение]


Мониторинг и проверка.



Для мониторинга значения переменной, вы можете подставить переменную в функцию.
«print()», таким вод образом.

print([Имя переменной])

И вы увидите, что в консоль было выведено значение переменной.
Пустая переменная:
Null
Переменная со значением, например 10:
10
Всё логично и понятно. Для проверки типа переменной, как и в JavaScript тут используется функция «typeof()», так что для наглядной демонстрации проверки переменной мы можем вызвать эту функцию таким образом.

var my_var = 10

func _ready():
print(typeof(my_var))

При этом в консоли мы увидим, что программа вывела двойку. По этой двойке не совсем понятно что именно это значит, так что немного изменим программу так чтобы она приводила сравнение.

var my_int = 10

func _ready():
print(typeof(my_int) == TYPE_INT)

Запустив мы увидим «True»
true
Это значит что тип нашей переменной int (TYPE_INT). Если записать в нашу переменную уже не целочисленное значение, то мы соответственно увидим «False», т.к. в таком случае наша переменная уже является вещественным значением.

var my_real = 0.5

func _ready():
print(typeof(my_real) == TYPE_REAL)

Теперь при запуске мы снова увидим «True». Так же можно проверить проинициализирована ли переменная, сравнив её с типом «TYPE_NIL»

var myVar

func _ready():
print(typeof(myVar) == TYPE_NIL)

Если переменная не проинициализирована, то мы увидим значение «True».
true
Вы так же можете это каким то образом использовать в коде.

# Кстати вы так же посмотреть все существующие
# типы с описаниями, для этого вам нужно с зажатым
# "Ctrl" щёлкнуть на интересующий вас тип.

# так же вы можете непосредственно перейти к
# классам этих типов данных таким же образом.



Для чего это нужно?



Всё дело в том, что в «GDScript» переменные не привязаны к определённым типам, соответственно объявленная переменная не ссылается на какой либо тип данных, то есть тип данных переменной зависит от самих данных, которые в себе хранит переменная, можно считать, что переменная в данном случае просто является ссылкой на эти самые данные.
Пример:
Если мы откатимся немного назад, к типу вещественных чисел «TYPE_REAL» и напишем такой код.

var my_var = 10

func _ready():
my_var = "Hello!"
print(typeof(my_var) == TYPE_REAL)

То есть мы берём переменную со значением 10 и переопределяем её строковым значением «Hello!». Изменится ли её от этого тип? Да изменится.
false
По этому функция typeof() вам когда-нибудь может очень пригодиться.
#На самом деле ситуаций когда вам может понадобиться функция typeof() не так много, но на этапе отладки она вам может очень сильно помочь

Простые типы данных.


Рассмотренные нами типы данных сейчас (числа, строки), являются простыми, так же к простым относится логический тип данных или же «bool»
#Логические значения могут принимать только два значения, а именно - «True» (Истина или 1) и «False» (Не истина или 0)
Таким образом, мы можем вынести несколько простых типов данных

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические


Операции.



Числовые операции.



Давайте объявим ещё одну переменную и перенесём в неё значение из какой либо уже существующей, и выведем её в консоль посредством функции print()

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические

func _ready():
var my_var = my_int
print(my_var)

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

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические

func _ready():
var my_var = my_int + my_real
print(my_var)

Результат:
10.5
Всё так же логично.
А что если теперь к ним прибавить переменную my_bool?

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические

func _ready():
var my_var = my_int + my_real + my_bool
print(my_var)

Мы получим ошибку:

Дело в том, что математические операции в классическом их понимании действуют только для числовых переменных, при этом неважно целочисленные они или дробные, поскольку и то и то у нас числа, тип результирующей переменной будет зависеть от полученных в ходе математических операций данных. То есть если в результате операции было получено дробное число - то тип будет вещественным, а если целое, то целочисленным, как не странно.
Далее интереснее. Если вы хотите использовать переменные разных типов в одном выражении - вам нужно использовать функции приведения типов.
Это специальные функции, которые приводят переменные одного типа, к переменным другого типа.
#При этом они не изменяют тип самой переменной, а только лишь возвращают новое значение.
Как правило, такие функции принимают переменные любых типов, и пытаются преобразовать их в те типы, к которым относятся.
Если вы помните, у нас вот здесь вот есть класс int который мы рассматривали в самом начале, который имеет у себя одну единственную функцию int() которая преобразует тип переданных ей аргументов в целочисленный тип данных

#Если вы обратите внимание, она позволяет нам брать в качестве аргумента - логический, целочисленный и строковый тип данных.
То есть если мы переменную my_bool обернём в функцию int(), таким вот образом.

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические

func _ready():
var my_var = my_int + my_real + int(my_bool)
print(my_var)

То в таком случае мы, получим вполне корректное выражение, которое выполняется и выдаёт нам ответ.
11.5
#Обратите внимание, что логический тип данных, при преобразовании в целочисленный или в строковый тип становится 1 или 0.
#То есть наше выражение в данном случае соответствовало бы выражению:
var my_var = 10 + 0.5 + 1

Если же мы заменим переменную my_bool на переменную my_string.

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические

func _ready():
var my_var = my_int + my_real + int(my_string)
print(my_var)

То получим:
10.5
#То есть сейчас данное выражение соответствует такому выражению:
var my_var = 10 + 0.5 + 0
Потому что переменная my_string в данном случае не содержит чисел, однако если изменить значение переменной my_string например на «1 Hello, World!»,то функция int() вычленит эту единичку, и мы увидим следующее:
11.5
#То есть наше выражение в данном случае снова соответствует выражению:
var my_var = 10 + 0.5 + 1

Если дописать ещё и нолик в конце, таким вот образом , то мы получим:
20.5
#То есть сейчас данное выражение соответствует такому выражению:
var my_var = 10 + 0.5 + 10
То есть у нас выбрасываются все, не числовые символы, а числовые возвращаются как целочисленный тип
данных.
Теперь обратите внимание, на используемый здесь оператор «+» - в случае с числовыми данными, оператор «+» выполняет обыкновенную математическую операцию сложения.
!!! Важный нюанс, о котором вам нужно знать и помнить! Оператор «+» ведёт себя как математическое сложение, только если в правом операнде [1], относительно оператора присвоения [3], первым идёт числовая переменная [2], или значение. Если не совсем понятно, смотрим на скриншот. (В тексте цвета рамок совпадают с цветами терминов, а так же цифрами.)


Текстовые операции.



Теперь рассмотрим другую ситуацию, когда мы переменной my_var присваиваем значение переменной my_string.

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические

func _ready():
var my_var = my_string
print(my_var)

То есть теперь она хранит строку «Hello, World!», и мы это прекрасно видим выполнив код:
Hello, World!
Теперь мы добавим к нашему выражению всё тот же оператор «» и попробуем произвести сложение, таким вот образом.

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические

func _ready():
var my_var = my_string + my_int
print(my_var)

И мы увидим ошибку.

Как многие уже могли догадаться, ошибка произошла из-за того же несоответствия типов, и всё что нужно, это преобразовать нашу числовую переменную my_int в строку при помощи функции str(), таким вот образом:

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические

func _ready():
var my_var = my_string + str(my_int)
print(my_var)

И собственно для строкового типа данных, оператор плюс ведёт себя уже по-другому. Он выполняет не математическое сложение, а дописывает к строке слева от него, ту строку, которая находится справа от него, или в простонародье склеивает строки вместе.
И вот что мы увидим, выполнив код:
Hello, World!10

Логические операции.



Для логического типов данных, есть отдельный вид математики, а именно логическая математика (алгебра логики). И простые математические операции, тут не работают. В «GDScript» есть несколько логических операторов, которые вы будете точно использовать в каждом вашем проекте, а именно:

Оператор and.



Оператор and, так же записывается в виде &&, как и в большинстве языков программирования.
В алгебре логики это выражение логическое умножение, и результат будет «True», только в том случае если оба значения являются «True», если хоть одно из них «False», то результатом будет «False».
Пример 1:

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические

func _ready():
var my_var = my_bool && true
print(my_var)

Результат:
true
Пример 2:

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические

func _ready():
var my_var = my_bool && true
print(my_var)

Результат:
false

Оператор or.



Оператор or, так же записывается в виде ||, как и в большинстве языков программирования.
В алгебре логики это выражение называется логическим сложением, и результатом будет «True», только в том случае если хотя бы одно из значений является «True», если же оба значения являются color red>«False», то результатом будет «False».
Пример 1:

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = true #Логические

func _ready():
var my_var = my_bool || false
print(my_var)

Результат:
true
Пример 2:

var my_int = 10 #Числовые
var my_real = 0.5 #Вещественные
var my_string = "Hello, World!" #Строковые
var my_bool = false #Логические

func _ready():
var my_var = my_bool || false
print(my_var)

Результат:
false

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

Итог.



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

Домашнее задание



А в качестве закрепления материала я предлагаю вам в качестве домашнего задания, попрактиковаться в математических операциях, в операциях преобразования типов и в выражениях комбинированных и разных типов, поиграться с ними и по ходу увидеть какие ещё трудности и ошибки могут возникнуть, т.к. по мере выхода уроков, их сложность будет постепенно возрастать.
Автор: TheDoctorChannel | Дата добавления: 15.01.2019 03:22 | Урок прочитан: 196 раз