00012. Редактирование main.scm. Переменные (Часть 3)

Редактирование main.scm. Переменные (Часть 3)|Мы продолжаем дальше изучать переменные. Этот урок посвящён массивам. Что это такое и с чем его едят мы рассмотрим здесь.|wmysterio|wmysterio||||Давайте представим опять школу, в школе есть "11-А" класс. Опять в классе есть ученики. Довольно часто случается так, что в классе есть люди, в которых имена одинаковы. Что бы не путать мы часто называем их по фамилиям, что бы человек знал, что обращаются именно к нему. Также и переменные могут иметь свои "фамилии", то есть то, что отличает его от других. В программировании часто это называют массивом. Массив — набор однотипных данных. Массивы имеют не сложный синтаксис, так что напишем пример одного из них:

Допустим в нашем классе будут учится 4 девушки с именем Рита. Что бы различать их, мы проиндексируем их, то есть зададим какое то число, что будет их фамилией. В скриптинге обозначают их квадратными скобками:**[ ** и ], в середине которых находится число:

$RITA[0] $RITA[1] $RITA[2] $RITA[3]

В реальной жизни можно написать аналогичный пример:

$RITA[Иваненко] (имеет индекс 0) $RITA[Сагаева] (имеет индекс 1) $RITA[Рейна] (имеет индекс 2) $RITA[Пушкинка] (имеет индекс 3)

Как видим в скобках написаны фамилии. Думаю посмотрев оба примера вы уже поняли как их писать и имеете базовое представление о массивах. Каждый массив имеет ограничение, но ограничения ставим мы сами, то есть нам решать сколько человек с одинаковым именем будет в классе. Что бы сделать ограничение, нужно написать слово var и закрыть его командой end. В середине этого блока объявляются массивы. Делается это следующей формулой:

VAR
$RITA: array 10 of integer
END

Рассмотрим детальнее:

VAR - открывается контейнер $RITA - имя переменной, которая будет считаться массивом 10 - максимальное количество элементов массива (максимальное количество фамилий, одинаковых фамилий не может быть ) integer - тип данных, который будут хранится END - закрывается контейнер

Написав всё это мы можем использовать переменные в своих целях.

Как и глобальные, так и локальные переменные могут быть массивами. Рассмотрим пример с локальными переменными. Объявлять массив так же само, а вот синтаксис совсем другой:

// объявление
VAR
0@: array 4 of integer
END

// использование
0@(5@, 4i)

Рассмотрим подробнее написанное:

0@ - имя перемененной, которая будет считаться массивом 4 - максимальное количество элементов массива i - тип данных, который будет хранить массив 5@ - дополнительная переменная, которая будет служить индексом

Всё было бы хорошо, если не дополнительная переменная. Если в место неё написать числовой индекс, то возникнет ошибка: "имя индексной перемененной не найдено":

Поэтому нужно создать дополнительную переменную, которая будет служить нашим индексом. Сделаем это:

5@ = 0
0@(5@, 4i)

По структуре будет работать также, как и переменная "$RITA[0]".

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

Для локальных переменныхДля глобальных переменных

```

var 0@: array 4 of integer end

5@ = 0 0@(5@, 4i) = 50 5@ += 1 0@(5@, 4i) = 100 5@ += 1 0@(5@, 4i) = 1000 5@ += 1 0@(5@, 4i) = -15

</td><td>

var $RITA:array 4 of integer end

1@ = 0 $RITA[1@] = 50 1@ += 1 $RITA[1@] = 100 1@ += 1 $RITA[1@] = 1000 1@ += 1 $RITA[1@] = -15

</td><td>

var $RITA:array 4 of integer end

$RITA[0] = 50 $RITA[1] = 100 $RITA[2] = 1000 $RITA[3] = -15

</td></tr>
</tbody></table>

В этой таблице видим, что кода больше в 1-й и 2-й колонке, так как используется дополнительная переменная. 3-я колонка имеет меньше кода. по этому советую использовать массивы глобальных переменных, та как их легче запомнить или писать. Но о локальных переменных тоже не следует забывать. 

<div class="alert alert-danger alert-dismissible" role="alert">
 <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
**ВАЖНО:** Локальные переменные имеют неприятное свойство - они "забирают" количество переменных под массив, из за этого правильным способом будет оградить себя от от использования некоторых переменных. В нашем случаи это переменные 0@ 1@ 2@ 3@ и 4@. Количество элементов массива равняется количеству пропускаемых переменных и начинается от переменной, объявленной как массив. В таком случаи мы избегаем возможность переписать элемент массива.
</div>

Рассмотрим основные типы данных, которые может хранить массив:

<table class="table table-bordered"><tbody>
<tr><th>Массив</th><th>Тип данных</th><th>Префикс</th><th>Описание</th></tr>
<tr><td rowspan="4">0@: array 4 of</td><td>integer</td><td>i</td><td>Целые значения, размер элемента: 4 байта</td></tr>
<tr><td>float</td><td>f</td><td>Дробные значения, размер элемента: 4 байта</td></tr>
<tr><td>short string</td><td>s</td><td>Строки с длиной до 7 символов включительно, размер элемента: 8 байт</td></tr>
<tr><td>long string</td><td>v</td><td>Строки с длиной до 15 символов включительно, размер элемента: 16 байт</td></tr>
</tbody></table>

Давайте сделаем локальную переменную-массив дробных чисел:

var 0@: array 4 of float end

5@ = 0 0@(5@, 4f) = -0.5



<div class="alert alert-danger alert-dismissible" role="alert">
 <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
**ВАЖНО:** Индекс всегда целое число, по этому дополнительную переменную следует объявлять тоже как целое. Идентификатор **всегда** начинается с 0 и увеличивается на единицу. Индекс не может быть больше максимального количества элементов, описанных в блоке "var".
</div>

Вот так, по аналогии, вы можете создавать массивы любых доступных типов данных. Главное, что бы идентификатор типа совпадал с типом данных, описанного в блоке "var". Например: "float" и "f". ( смотрите таблицу выше, что бы не путали ).

Есть ещё типы данных и некоторые трюки, но о них я расскажу в следующих уроках.

<div class="alert alert-warning alert-dismissible" role="alert">
 <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
**Примечание:** На самом деле глобальные массивы имеют тотже синтаксис, что и локальные ( $RITA($INDEX,4i) ), но Sanny Builder позволяет нам использовать упрощённый синтаксис.
</div>|1392|1|0|49600884`png`446`133`400`119``\||redaktirovanie_main_scm_peremennye_chast_3|1498484960

Last updated