Рейтинг - 5.0 (2)

В этом уроке мы познакомимся с типами данных в SCM-скриптах и типами переменных. Также будут рассмотрены арифметические операции над числами.

Вот так, понемножку, мы подошли к переменным. Что же это такое? Если образно представить, то можно сказать, что это ящик, в котором можно что то хранить. В потоках мы можем использовать много таких ящиков ( но не нужно забывать о лимитах ). Эти ящики называются переменными.

Так что же именно мы можем хранить? Давайте рассмотрим несколько типов данных:

Тип данныхПример
1Целое число1, 0, -100
2Дробное число6.0, 0.0, -20.5
3Короткая строка ( максимум 7 символов)'STRING', 'HELLO'
4Длинная строка ( максимум 15 символов)"MY_STRING", "RU-SCRIPT"

Отличаются 3-й и 4-й тип тем, что они имеют свои ограничения по длине, в использовании, и пишутся они в разных скобках.

Естественно для этих типов есть свои правила, но запомнить нужно только то, что выполнять операции можно только между данными одинакового типа. Иначе результат будет неправильным. Кстати, насчёт операций... Давайте рассмотрим, что же можно делать с числами:

ОперацияОписание
+=Сложение
*=Умножение
/=Деление
-=Вычитание

Приведу примеры этих операций:

ПравильноНе привильно
2 += 222.5 += 7
0.25 *= -0.15 *= 3.4
220 /= 532.0 /= 4
33.3 -= 1.588 -= -55.5

Вот, собственно, основные правила арифметических операций над числами. Правда записываются они в иной форме, так как что в место чисел слева у нас будут переменные! Думаю самое время рассказать о них.

Каждый человек имеет имя. Например, Ваня, Вася, Дима и т.п. Также имеют имена и наши переменные. Что бы создать переменную, нужно выполнить небольшую операцию: поставить знак доллара $ и ввести имя.

Для примера, напишем несколько:

$WANYA
$WASYA
$DIMA

Итак, мы научились писать имена переменных. Их можно использовать во всём мейне и использовать во всех потоках. Такие переменные называю глобальными. Но есть и другие переменные, так званые - локальные - они тоже имеют имена, только, в отличии от глобальных, имена состоят только с положительных целых числел, а в конце имени стоит знак собаки электронной почты ( читается как "эт" ): @. Для примера, напишем несколько таких:

0@
1@
2@

Для строк синтаксис написания немного другой:

Глобальные строки
v$WANYAМожно записать только строку с длинной в 15 символов, то есть с кавычкой "
s$WANYAМожно записать только строку с длинной в 7 символов, то есть с кавычкой '
Локальные строки
0@vМожно записать только строку с длинной в 15 символов, то есть с кавычкой "
0@sМожно записать только строку с длинной в 7 символов, то есть с кавычкой '

Помните о ящиках? Так вот: всё куда то записывается! В нашем случае значение записываются в переменные ( образно - в ящики ). Давайте запишем число в переменную! Делается это так:

$WANYA = 2 // здесь операция = является записью числа 2 в переменную $WANYA

Мы записали в переменную "$WANYA" число 2. Правда не сложно? Давайте тогда умножим нашу переменную на число 3. Посмотрев операции над числами выше, напишем пример:

$WANYA *= 3 // умножаем переменную $WANYA на число 3

Следовательно, в переменной "$WANYA" теперь будет хранится число 6, так, как 2*3=6. То есть, сначала идут арифметические операции, а результат сохраняется в той же переменной, стирая предыдущее значение. Напишем несколько таких операций:

$WANYA = 3
$WANYA *= 4
$WANYA /= 2

Не надо быть сильным в математике, что бы понять, что теперь в переменной "$WANYA" будет хранится число 6, хоть до операций в ней было число 3.

Но все те старания будут напрасны, если напишем следующее:

$WANYA = 3
$WANYA *= 4
$WANYA /= 2
$WANYA = 3

Почему напрасны? Потому что если написать так в скрипте, в "$WANYA" всё равно будет число 3 в независимости от выполненных ранее операций. Вот и особенность последовательности команд. Если всё же не поняли, приведу математический пример:

3 — 1-я операция - записываем число в переменную
3*4=12 — 2-я операция
12/2=6 — 3-я операция
3 — 4-я операция - записываем число в переменную

В общем основы с числовыми переменными думаю вы усвоили. Что же, давайте все арифметические операции перенесём в скрипт. Создадим поток с именем "MATEM" и напишем несколько операций в нём:

:MATEM
thread 'MATEM'
wait 0
$WASYA = 2
$WASYA += 4
$WASYA *= 3
$WASYA /= 9
$WASYA -= 2
end_thread

Ваша задача - посчитать, какое число будет в переменной "$WASYA" после завершения потока. Если у вас вышло число 0, то у вас огромный прогресс в операциях над переменными. Если всё же не вышло, попробуйте посчитать сначала. Это очень важно, так как мы учимся мыслить по-скриптерски.

Есть также операции, которые пишутся опкодами. Например, нужно переменную суммировать с другой переменной. Если написать так: "2@ += 3@" то появится ошибка:

Неверное выражение 2@ += 3@. Одна из переменных имеет неизвестный тип, либо их типы несовместимы.

В санни билдере невозможно выполнить данную операцию в таком виде. Для этого нужно воспользоваться опкодом! Пришло время применить фукнцию поиска опкодов! Для этого нажмите CTRL+ALT+2. Должно появится окошко:

В поле "Искать" введите следующее:

@ += @

И вот мы видим наш список сократился во много раз:

Первые 2 опкода в списке - то, что искали. Осталось только определить тип данных, которых будет складывать. Оба типа должны совпадать! Если наши переменные - целые числа, то выделяем опкод, где есть комментарий "//(int)". Если наши переменные - дробные числа, то выделяем опкод, где есть комментарий "//(float)".

После этого жмём правую кн. мыши и жмём "Копировать":

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

Есть и другой способ облегчить этот процесс, но о нём мы вернёмся чуть позже.

Вот мы и скопировали опкод, который нам был нужен. В нашем случаи опкод будет суммировать 2 дробных числа локальных переменных. Всё, что нам осталось - это переименовать переменные на нужные. Думаю с этим проблем не возникнет. Главное не перепутать с типами ;)

Искать "/", "*", "-" можно по аналогии к примеру выше.

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

$ += $

Дальше всё по аналогии. Если нужно сделать операции, где нужно от глобальной переменной отнять локальную переменную, то в поиске введите:

$ -= @

Но не советую вам делать операции, где есть локальная и глобальная переменная без крайней необходимости. Лучше что бы обе были либо локальными, либо глобальными.

Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
Какие GTA вы прошли ( сюжетная линия )?
Всего ответов: 2
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0

Сегодня нас посетили:
wmysterio, DK22Pac, Dyabda
Реклама