Переменные и массивы в QSP.
Для самых маленьких, но не очень.
Переменные
Для начала определимся, что из себя представляет переменная.
Действительно, что?
Все мы знаем, что у компьютера есть память, так как он умеет запоминать интересные фильмы, отличную музыку и картинки с котиками. И всё это компьютер хранит в разных участках своей памяти.
Как правило, фильмы, музыка и фотографии хранятся в виде отдельных файлов.
Но что если нам не нужен целый файл, а мы просто хотим, чтобы компьютер запомнил какое-либо число?
Тут-то и выручают переменные.
Компьютер выделяет частичку своей памяти, и мы что-то в неё записываем. Условно эту частичку памяти можно представить в виде коробки, которую мы можем в любой момент открыть и положить туда что-нибудь.
То, что мы кладём в "коробку", то есть записываем в память компьютера, называется данными.
В QSP данные бывают двух типов: числовые и текстовые. Поэтому и в коробку Вы можете положить либо текстовые, либо числовые данные.
Данные, которые не являются файлами и представляют из себя запись числа или текста, называются значениями.
Компьютер не спутает одну коробку с другой, он знает, куда и что положил, а вот программисту, чтобы не запутаться, нужно знать, как найти в памяти компьютера то или иное значение. Для этого и придумали давать участкам памяти компьютера имена.
Это что-то вроде таблички на ящике, по которой можно узнать, что в этом ящике хранится.
Таким образом, переменная — это именованная область памяти компьютера.
Чтобы "положить данные в коробку", следует ввести специальную команду:
ИМЯ_ПЕРЕМЕННОЙ = ЗНАЧЕНИЕ_ПЕРЕМЕННОЙ
Это называется "присвоить значение переменной", или "вернуть значение переменной". У нас на картинке нарисована красивая коробка с именем "BOX". Присвоим ей какое-нибудь значение:
BOX = 13
Произносится это так: "Переменной BOX присвоено значение 13". Или: "Переменной BOX возвращено значение 13". Или: "В переменную BOX записано значение 13". Или просто: "BOX равно 13".
Как мы уже говорили, данные в QSP бывают двух типов. Значит и переменным можно присваивать значения двух типов.
Чтобы отличить переменные с данными числового типа от переменных с данными текстового типа (для краткости мы будем называть их числовыми и текстовыми переменными), в начале названий переменных текстового типа стали записывать знак "$". То есть, если бы мы захотели поместить в нашу коробку текст, её имя выглядело бы так:
$BOX
Текст, который мы хотим вернуть переменной, должен быть как-то выделен, чтобы плеер мог понять, где начинается и заканчивается значение, а где продолжается код программы. Для этого используются символы апострофов ('), или кавычек (").
Вернём переменной $BOX какой-нибудь текст:
$BOX = "Текст"
$BOX = 'Текст'
Эти две записи работают абсолютно одинаково.
Есть третья группа символов, которые можно использовать для указания текстовых значений. Символы фигурных скобок:
$BOX = {Текст}
Однако с ними нужно быть осторожными, и использовать с умом.
Во всех трёх случаях в переменную $BOX будет записано одно и то же значение. То есть символы, выделяющие значение в коде программы, не записываются в переменную.
Для чего же введено столько разных символов, если все они делают одно и то же?
Всё очень просто. Иногда в тексте нужно использовать один или несколько из этих символов. Например, вы хотите поместить в переменную кусочек диалога с прямой речью:
Орк усмехнулся и сказал: "Что ты хочешь, Мора? Хочешь мухомора?!"
Чтобы поместить текст, в котором уже присутствуют кавычки, в переменную, следует воспользоваться апострофами:
$BOX = 'Орк усмехнулся и сказал: "Что ты хочешь, Мора? Хочешь мухомора?!"'
Или же вы хотите поместить в переменную текст с апострофом:
$BOX = "Руг'Ста'Раг"
Можно даже поместить текст с тем и другим символом:
$BOX = "Руг'Ста'Раг" + ' усмехнулся и сказал: "Что ты хочешь, Мора? Хочешь мухомора?!"'
$BOX = "Руг'Ста'Раг усмехнулся и сказал: ""Что ты хочешь, Мора? Хочешь мухомора?!"""
$BOX = 'Руг''Ста''Раг усмехнулся и сказал: "Что ты хочешь, Мора? Хочешь мухомора?!"'
В этих случаях в переменную будет внесено следующее:
Руг'Ста'Раг усмехнулся и сказал: "Что ты хочешь, Мора? Хочешь мухомора?!"
Следует пояснить вторую и третью строчку последнего примера кода.
Этот способ вставлять символы, которые уже были использованы для указания значения, называется экранирование.
Если очень нужно вставить внутри текстового значения, выделенного апострофами, другой апостроф - его просто следует написать дважды. Один символ экранируется другим, и таким образом воспринимается, как один апостроф. То же и с кавычками.
Массивы
Ну а что же такое массивы?
Теперь, когда о переменных мы знаем почти всё, этот вопрос не даёт нам покоя.
Массив - это тоже своего рода область памяти, где хранятся данные, но представить его можно, как огромный шкаф со множеством ящиков. Масив очень похож на камеру хранения. И ящики там называются подходяще: ячейки (ячейки массивов ещё называются "элементами массивов").
Каждой ячейке массива присваивается порядковый номер, начиная с нуля, а всему массиву — имя. Это значит, что массив — это именованная область памяти для хранения нескольких значений, сходных по смыслу.
В коде, чтобы работать с конкретной ячейкой массива, используется следующая запись:
ИМЯ_МАССИВА[НОМЕР_ЯЧЕЙКИ]
Допустим, мы хотим поместить в ячейку номер 3 массива BOX число 13. Это делается так:
BOX[3] = 13
И читается так: "Третьей ячейке массива BOX присвоено значение 13".
Точно так же, как и в переменные, в ячейки массива можно вписывать значения двух типов: числовые и текстовые. То есть в одном массиве Вы можете хранить одновременно и текстовые и числовые значения:
$BOX[0]= "Текст"
BOX[2] = 13
*PL $BOX[0]
*PL BOX[2]
Однако так делать не рекомендуется. Старайтесь хранить в одном массиве значения только одного типа. Если Вам нужно сохранить значение другого типа, заведите массив с другим именем:
$BOX_TEXT[0]= "Текст"
BOX_NUMBER[2] = 13
*PL $BOX_TEXT[0]
*PL BOX_NUMBER[2]
Надо сказать, что в QSP Вам не нужно заранее заботиться о создании переменных или массивов. В отличие от многих других языков программирования, инициализация в QSP происходит автоматически, когда Вы присваиваете переменной или ячейке массива значение.
И раз уж речь зашла о создании массивов ИЛИ переменных, нужно сказать, что в QSP все переменные — это массивы. Просто это массивы, состоящие из одной ячейки.
Запись
BOX = 13
и запись
BOX[0] = 13
эквивалентны. Просто первая запись является как бы укороченной версией второй. Это можно проверить, выполнив простенький код:
BOX = 13
*PL BOX
*PL BOX[0]
BOX[0] = 15
*PL BOX
*PL BOX[0]
Дважды на экран будет выведено число 13, дважды - 15. Таким образом, нулевой элемент любого массива можно вызвать, просто написав имя массива.
Есть упрощённая запись для вызова последнего элемента массива, неважно, какой у него номер:
BOX[]
В случае, если вы возвращаете последнему элементу массива значение, будет создан новый элемент сразу за последним, а если вы получаете значение последнего элемента, оно будет взято таки у самого последнего по номеру. Например, есть массив:
BOX[0]=1
BOX[1]=3
BOX[2]=35
BOX[3]=13
Если запросить вывод на экран значение последнего элемента, то это будет значение элемента BOX[3].
*PL BOX[]
Если присвоить последнему элементу число, то будет создан элемент BOX[4] и ему уже будет присвоено число:
BOX[] = 39
Легко проверить это, запустив простенький код:
BOX[0]=1
BOX[1]=3
BOX[2]=35
BOX[3]=13
*PL BOX[3]
*PL BOX[]
*PL BOX[4]
BOX[] = 39
*PL BOX[3]
*PL BOX[]
*PL BOX[4]
Подряд будут выведены числа 13 - 13 - 0. Потом числа 13 - 39 - 39.
Таковы основные сведения о массивах и переменных.