Преобразование типов в QSP
Эта статья поможет вам разобраться в таком сложном вопросе, как преобразование типов в операции присвоения, или в выражениях.
В QSP существует всего два типа значений: числовой и текстовый. Числовой означает любое целочисленное число в пределах от -2147483648 до 2147483647; а текстовый — любую строку текста (нет, на самом деле любую. Ограничения для строк — 2 Гб текста).
Начиная с плееров версии 5.9.0 в QSP появился новый тип данных: кортежи. Принципиально в преобразовании типов с появлением нового ничего не поменялось.
Статья будет выпущена несколько позже.
Вот как выглядят такие значения:
! числовые значения
123
345
999
!текстовые значения
"строка текста"
'Ещё одна строка текста'
"Третья строка текста"
Для хранения значений мы используем переменные или массивы. И точно так же массивы и переменные (далее просто — переменные) бывают двух типов.
Чтобы записать в числовую переменную числовое значение, мы просто пишем имя переменной, знак = и число:
box=13
Чтобы записать в текстовую переменную текстовое значение, перед именем переменной мы обязательно ставим знак $.
$text='Текстовое значение'
Если мы попытаемся записать в текстовую переменную числовое значение, плеер автоматически преобразует число в текст, и в текстовой переменной окажется текстовое значение:
$text=123
! экви валентно
$text=$str(123)
Если мы попытаемся присвоить числовой переменной текстовое значение, плеер попытается преобразовать текстовое значение в числовое, но если преобразование невозможно, на экране появится ошибка.
box='134' & ! тип будет преобразован, а в box запишется число 134
cell='non cifer' & ! тип не будет преобразован, плеер выдаст ошибку 101
! не эквивалентно
box=val('134') & ! строка преобразуется в число, в box запишется число 134
cell=val('non cifer') & ! строка не преобразуется в число, в cell запишется 0
! только для команды 2 не удастся выполнить преобразование типа
Всё становится гораздо интереснее, если мы имеем дело не с отдельными значениями, а с выражениями.
Например, если мы попытаемся сложить два числа, то результатом сложения будет третье число:
123+456 & ! результатом будет число 579
Если мы попытаемся «сложить» две строки, то мы их просто «склеим» (в программировании это называется конкатенация):
"Hello"+"World" & ! результатом будет строка "HelloWorld"
Но что будет, если мы попытаемся сложить число и строку?
А тут произойдёт вот что.
Если хотя бы одно из значений в выражении — числовое, плеер попытается все значения преобразовать в числовые и вычислить выражение:
123+"456" & ! результатом будет число 579
Если преобразование не удастся, то выполняется конкатенация:
123+"d456" & ! результатом будет строка 123d456
Строки можно только «складывать» или сравнивать, поэтому если вы попытаетесь проделать с ними какие-то другие штуки, плеер выдаст ошибку о несоответствии типов данных:
"Hello"-"World" & ! плеер выдаст ошибку 101
Однако, если возможно преобразование всех строк в числа, то можно сделать так:
"4560"/"3"*"9" & ! результатом будет число 13680
Таким образом, плеер обязательно преобразует тип к необходимому, если это возможно, особенно для операций присвоения.
Вам не нужно строго следить за тем, какие типы значений вы используете в выражениях, однако старайтесь избегать выражений, в которых математические операции применяются к строкам.
Старайтесь не использовать строковые и числовые значения в одном выражении, либо приводите их к требуемому типу с помощью функций $str и val:
$str(1234) & ! преобразует число в строку
! если получает строку, возвращает строку
$str("string")
val("1234") & ! преобразует строку в число
! если не может преобразовать в число, возвращает ноль
val("string")
Не забывайте пользоваться подвыражениями, если нужно вставить значение в строку:
health=100
max_health=350
*pl "Здоровье: <<health>>/<<max_health>>."
P.S.:
Данную статью вы можете найти так же и на других ресурсах: