- •С чего начать
- •Переменные и присвоение им значений
- •Области видимости
- •Настойчивые переменные
- •Изменяемый тип переменных
- •Присвоение значения по ссылке
- •Выделение памяти и уборка мусора
- •Имена переменных
- •Числовые литералы
- •Строковые литералы
- •Литералы времени
- •Литералы имен объектов
- •Литералы
- •Литералы точек в двумерном и трехмерном пространстве
- •Литералы массивов
- •Выражения
- •Простые выражения
- •Математические выражения
- •Порядок выполнения операций в математических выражениях
- •Полиморфизм
- •Выражения сравнения
- •Логические операции
- •Сокращенное выполнение логических выражений
- •Позиционированные и именованные параметры
- •Приоритет вызова функций
- •Написание вызова функции в несколько строк
- •Другой способ вызова функций
- •Контекстные выражения
- •Комментарии
- •Обращение из одного скрипта к другим
- •Управление порядком выполнения операторов
- •Пропуск выполнения цикла
- •Собственная обработка ошибок
- •Оформление функций
- •Переменная, содержащая функцию
- •Параметры функций
- •Принудительное завершение функции
- •Определение структур
- •Создание функций, локальных внутри структуры
- •Базовые классы maxScript Класс Value
- •Операторы
- •Литералы
- •Операторы
- •Свойства
- •Операторы
- •Точка в трехмерном пространстве
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Литерал
- •Конструкторы
- •Свойства
- •Произвольный поворот
- •Литералы
- •Конструкторы
- •Операторы
- •Свойства
- •Углы Эйлера
- •Операторы
- •Свойства
- •Прямоугольник
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Функция
- •Массив_чисел
- •Вспомогательные методы Функция
- •Функция
- •Можно открыть зашифрованный файл, используя функцию
- •Свойства
- •Свойства
- •Особенности работы с ключами анимации
- •Массив параметров
- •Конструкторы
- •Свойства
- •Операторы
- •Множества
- •Шаблонные группы
- •Свойства
- •Операторы
- •Функции для работы с группами
- •Наборы объектов
- •Конструкторы
- •Свойства
- •Операторы
- •Функции, работающие с наборами
- •Дополнительные сведения
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Операторы
- •Конструкторы
- •Конструкторы
- •Свойства
- •Свойства
- •Операторы
- •Литералы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Скрипт-утилиты
- •Панель скрипт-утилиты
- •Составные части тела свитка
- •Создание перемещаемых окон
- •Видимость локальных переменных, структур, функций и компонент интерфейса из кода свитка
- •Доступ к локальным переменным и прочим элементам утилит и свитков из внешнего кода
- •Компоненты пользовательского интерфейса
- •Название_компонента Имя_переменной Символьная_строка
- •Общие свойства компонентов пользовательского интерфейса
- •Общие параметры компонентов пользовательского интерфейса
- •Типы компонентов пользовательского интерфейса Для примера рассмотрим утилиту, использующую все возможные компоненты пользовательского интерфейса
- •Битовая карта
- •Параметры
- •Свойства
- •События
- •Параметры
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Выпадающий список
- •Параметры
- •Свойства
- •События
- •Свойства
- •События
- •Кнопка выбора текстурной карты
- •Параметры
- •Свойства
- •События
- •Кнопка выбора материала
- •Параметры
- •Свойства
- •События
- •Список с возможностью множественного выбора
- •Параметры
- •Свойства
- •События
- •Кнопка выбора объекта
- •Параметры
- •Свойства
- •События
- •Задатчик
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Кнопки с картинками
- •Скрипт контекстного меню
- •Тело контекстного меню
- •Пункт меню
- •Разделитель
- •Подменю
- •Макро скрипты
- •Создание файлов с иконками
- •Средства работы с мышью
- •Остановить работу средства можно вызовом функции
- •Правила оформления средств работы с мышью
- •События
- •Скрипт плугины
- •Правила построения скрипт-плугина
- •Внесение изменений в плугин
- •Урок 1. Твердые тела
- •Создание набора твердых тел
- •Добавление тел к набору
Области видимости
Дело в том, что любая переменная может быть объявлена глобальной или локальной. Значения локальных доступны только на определенном участке программы, глобальных – везде. Рассмотрим пример. Создайте и выполните такой скрипт.
(
k = 10
)
print k
Круглые скобки как раз и означают начало и конец некоторого участка, далее называемого областью видимости. Все переменные, объявленные в этом участке, считаются локальным, если прямо не указано обратное. На первый взгляд все кажется просто. Переменной присваивается число, в данном случае 10, затем это значение выводится на экран. Не то на самом деле. Поскольку первый раз переменная встречается внутри области видимости, то внутри нее она получает значение 10. После выхода из этой области значение k теряется и в операторе print k участвует уже другая переменная – глобальная, так как все переменные, объявленные или в первый раз встретившиеся вне какой-либо области видимости, считаются глобальными. Объявить локальную переменную вне области видимости просто не удастся, получите сообщение об ошибке. Но вернемся к нашему примеру. Результатом работы оператора вывода print k будет вывод на экран сообщения
undefined
Это значение присваивается переменной, которая объявлена, но которой не присвоено никакого значения. А дальше начинается еще интереснее. Вот что произойдет, если выполнить тот же скрипт второй раз. Внутри области видимости система встретит выражение
k = 10
Теперь, после предыдущего выполнения этого скрипта будет считаться, что k – глобальная переменная, поскольку она была упомянута вне областей видимости. Ей и присвоится значение 10 и при выводе print k на экран выйдет сообщение
10
Отсюда правило: с переменными надо быть крайне осторожным. Все глобальные переменные лучше всего объявлять в начале скрипта. Делается это, например, так:
global k
( --Начало области видимости
k = 10
) --Конец области видимости
print k
Вот теперь все правильно. Если Вам все же нужно, чтобы внутри области видимости переменная k была локальной, то напишите так:
global k
( local k --Начало области видимости
k = 10
) --Конец области видимости
print k
Осталось только упомянуть, что области видимости могут быть вложенными друг в друга. Переменная, локальная внутри области видимости будет видимой внутри всех областей вложенных в нее. Рассмотрим пример.
global k
( local k --Начало первой области видимости
k = 10
( --Начало второй области видимости
print k
) --Конец второй области видимости
) --Конец первой области видимости
print k
В этом случае мы имеем дело с двумя переменными k, во второй области видимости, вложенной в первую, используется та же самая k, что и в первой.
Круглые скобки – не единственный способ начать новую область видимости. Кроме них новая область начинается
С началом новой функции.
С началом цикла for.
С началом определения утилиты, свитка, контекстного меню, Macro Script-а или инструмента (tool).
С началом обработчика событий утилиты, свитка, контекстного меню, Macro Script-а или инструмента (tool).
С началом when
Небольшое исключение. Переменная, управляющая циклом for локальна внутри него всегда. В скрипте
( local i = 50
( for i = 1 to 5 do print i
)
print i
)
две переменных i, а не одна, первая объявлена локальной в первой области видимости, другая управляет циклом. В этом нетрудно убедится, выполнив приведенный скрипт.
