
| Переменные |
|
Изменения, изменения и еще больше изменений! Их множество. Все с них начинается и ими заканчивается. Изменения = Переменные Когда вы идете за покупками и тратите все свои деньги - переменная "Кошелек" переходит из состояния "Полный" в состояние "Пустой". Путешествие из страны в страну изменяет ваше местоположение. Когда вы едите мороженое, его количество в стаканчике уменьшается. Компьютеры не могут работать без потоков чередующихся нулей и единиц. Сложно представить, что было бы без переменных. Особенно с компьютерами. Именно поэтому компьютеры используют их в огромном количестве. Возьмем программу для создания мультимедийных приложений (созданную в противовес Скучному Миру) - переменные могут оказаться вполне полезными и для MMB, разве нет? Ваши приложения основаны на переменных данных. Данные называются переменными, если программа может изменять их напрямую.
Стакан на рисунке представляет собой имя переменной. Содержимое в стакане меняется. Изменение происходит с течением времени. Переменные в MMB используются для каждого сегмента данных, который необходимо записать или прочитать. В MMB есть два вида переменных:
Переменные состоят из:
Имена и значения переменных разных типов отличаются и будут рассмотрены ниже. Примечание для пользователей с опытом программирования: MMB не требует объявления переменных перед их использованием. Поэтому ваша задача - только использовать их. Некоторые задачи в программировании требуют использования математических операций, поэтому для работы необходимы числа. Именно здесь числовые переменные находят свое применение. Вы будете использовать их для хранения чисел. Существует два типа чисел, которые можно хранить в числовых переменных:
Если мы возьмем хрустальную чашу и поместим в нее числа - мы получим числовую переменную! В MMB важной частью переменной является ее имя. Вот несколько примеров возможных имен:
Рекомендуется использовать понятные и осмысленные имена, не слишком короткие и не слишком длинные - достаточные для понимания содержания переменной. Если вы используете числовую переменную для хранения количества щелчков мыши, имя этой переменной должно быть, например, MouseClicks или NumOfMouseClicks. Самая важная часть этой главы - присваивание значения переменной.
Чтобы сделать это в программном коде: a) пишут имя переменной: чаша b) затем указывают знак равенства: = c) и после знака равенства пишут значение переменной: 5415 В полном виде этот код выглядит следующим образом: чаша=5415 Так! С помощью этой строчки вы указали MMB: "Возьми чашу, и помести туда число 5415." Где вы дадите эту инструкцию? Конечно же, в редакторе скриптов. Именно здесь вы поместите вашу первую строчку кода в MMB (если, конечно, вы не догадались пропустить весь этот скучный материал) ;) Отлично. Но неужели это все возможности? Назначать определенные числа и больше не изменять их? Нет! Очень важно иметь возможность присваивать значение одной переменной другой. Иначе говоря, если вы дадите ребенку картинку:
В виде кода это выглядит так: a) пишут имя переменной, принимающей значение: лицо2 b) затем указывают знак равенства: = c) и пишут имя исходной переменной: лицо1 В полном виде этот код выглядит следующим образом: лицо2=лицо1 Если переменная лицо1 содержит число 328, то с помощью этой строчки переменная лицо2 примет такое же значение. Использовать переназначение содержимого переменных рекомендуется в том случае, если вы планируете несколько математических действий над переменной и не хотите потерять ее исходное значение. Проведем параллель с реальной жизнью: вы сначала потренируетесь на черновике, прежде чем работать с оригиналом. Программируя в MMB, можно не бояться потерять оригинал - просто назначить исходное значение другой переменной и работать с ней. Это полезная возможность, верно? Говоря о математических действиях, необходимо указать математические операторы, используемые в MMB:
Посмотрите, сколько возможных комбинаций... Математические действия с двумя и более числами: a=432/21 Математические действия с двумя и более числовыми переменными: a=b*c Математические действия с использованием чисел и числовых переменных: a=b+42*NumberOfClicks Все это примеры возможных выражений! Вы поймете, что на практике они очень полезны. Как только вычисления в правой части выражения закончены, результат присваивается переменной, находящейся слева, и вы можете использовать вычисленное значение где угодно, например, вывести сообщение с результатом: Price=2032*Quantity+83/NumberOfMembers Эти две строчки Вот еще один пример с математическими действиями: days=365 В окне сообщения отобразится результат 36500000. Примеры, приведенные выше, показывают, где можно использовать числовые переменные. Кроме них существует множество других применений, в особенности при работе в мультимедийной среде. Для всего остального, кроме чисел, используемых для математических операций, вы будете применять строковые переменные. Буквы, слова, предложения, абзацы являются естественным содержимым строковых переменных.
Если мы возьмем хрустальную вазу и поместим в нее слова - мы получим строковую переменную. Важной частью строковой переменной является ее имя. Имя строковой переменной состоит из собственно имени и знака $.
Никогда не забывайте о символе $ в имени переменной. Этот знак говорит MMB: "Это переменная строкового типа". Рекомендуется использовать понятные и осмысленные имена, не слишком короткие и не слишком длинные - достаточные для понимания содержания переменной. Если вы будете использовать строковую переменную для хранения ответа пользователя на заданный вопрос, то имя этой переменной должно быть UserAnswer (ОтветПользователя) или AnswerNo1 (ОтветНомер1). Важная часть этой главы - присваивание значения переменной.
Чтобы сделать это в программном коде: a) пишут имя переменной: выражение b) добавляют суффикс: $ c) затем указывают знак равенства: = d) и после знака равенства пишут значение переменной. Значение заключается в апострофы: 'Мое первое выражение со строковой переменной!' В полном виде этот код выглядит следующим образом: выражение$='Мое первое выражение со строковой переменной!' Так! С помощью этой строчки вы указали MMB: "Возьми чашу, и помести туда предложение Мое первое выражение со строковой переменной!". Где вы дадите эту инструкцию? Конечно же, в редакторе скриптов. Вы можете задать вопрос: "А как быть с выражениями, содержащими апострофы?" What's this? ...то в строковой переменной она будет храниться в виде: выражение$='What\'s this?' Чтобы сказать MMB: "В этой строковой переменной я использую апостроф", вы применяете символ \ (обратный слэш) перед апострофом. Естественно, мы должны позаботиться и о том случае, когда обратный слэш используется для указания пути. Строковая переменная, содержащая путь, выглядит так: path$='C:\WINDOWS\\' Этот пример содержит двойной обратный слэш в конце строки. Объясняется это очень просто - MMB использует один слэш перед апострофом для отображения апострофа. Если вы указываете в строковой переменной путь, то последний слэш должен распознаваться как конец строки, а не апостроф. Единственный путь - использование двойного символа \. Отлично. Теперь, как и в случае с числовыми переменными, возникает вопрос: "Указывать значения и больше не изменять их?" Нет! Очень важно иметь возможность присваивать значение одной переменной другой. Вот пример. Если у вас есть чаша со словами:
В виде кода это выглядит так: a) пишут имя переменной, принимающей значение, и суффикс $: чаша2$ b) затем указывают знак равенства: = c) и пишут имя исходной переменной с суффиксом $: чаша1$ В полном виде этот код выглядит следующим образом: чаша2$=чаша1$ Если переменная чаша1$ содержит слово Привет, то с помощью этой строчки переменная чаша2$ также примет значение Привет. Использовать переназначение содержимого переменных рекомендуется в том случае, если вы планируете несколько действий над строковой переменной и не хотите потерять ее исходное значение. Программируя в MMB, можно не бояться потерять оригинал - просто назначить исходное значение другой переменной и работать с ней. Для того чтобы объединить строки и поместить результат в одну переменную, используют оператор + Например, если первая строковая переменная определена следующим образом: FirstPart$='Быть или не быть... ' А вторая переменная выглядит так: SecondPart$='вот в чем вопрос.' Тогда код для объединения строк будет таким: CompleteSentence$=FirstPart$+SecondPart$ Результат объединения будет помещен в переменную CompleteSentence$: Быть или не быть... вот в чем вопрос. Тот же результат был бы достигнут прямым назначением текста (но при этом текст становится фиксированным) переменной CompleteSentence$: CompleteSentence$='Быть или не быть... '+'вот в чем вопрос.' Вот наиболее часто применяемые способы определения значения строковой переменной:
Содержимое правой части выражения присваивается переменной, стоящей перед знаком равенства, и вы можете использовать полученное значение где угодно, например, в сообщении: a$=name$+' проголодался.' Эти две строчки Вот пример кода, состоящего из нескольких строк с оператором объединения: Player1$='Тимон' В окне сообщения появится следующий текст: Матч: Тимон vs Пумба Использование строковых переменных в качестве имен объектов Гибкость MMB позволяет использовать в различных командах в качестве имен объектов значение строковых переменных:
Как видно из рисунка, имя объекта "MyScript" назначено строковой переменной label$. Каждая команда, содержащая имя объекта, может вместо фиксированного имени использовать содержимое строковой переменной. Для этого вы сначала присваиваете переменной имя объекта: ObjectLabel$='MyScript' ...затем вызываете команду, в которой необходимо указать имя объекта. Например, команду RunScript, которая в качестве единственного параметра использует имя объекта. Именно здесь можно поместить значение переменной вместо фиксированного имени объекта: RunScript("ObjectLabel$") Эта особенность очень полезна, если объекты имеют схожие имена (Text1, Text2, Text3...) и определенная команда повторяется для каждого объекта - например, в циклах for..next. Эти примеры показали вам несколько способов применения строковых переменных. Есть множество других вариантов, поэтому мы предлагаем вам экспериментировать и наслаждаться возможностями строковых переменных! Помните полки и ящики в гараже? Они играют роль массивов - вы кладете одинаковые инструменты на одну и ту же полку или в один ящик. Винты и шурупы разных размеров находятся в разных ящиках. Еще массив напоминает погрузку нескольких ящиков в грузовик:
Вы видите, что грузовик на рисунке содержит схожие ящики (на эту мысль наводят обозначения на двери грузовика и ящиках). Каждый ящик имеет свой номер. Это причина, по которой можно было бы использовать массивы в программе - они помогают программисту хранить схожие данные в одном контейнере. Легче погрузить одинаковые ящики в один грузовик, чем использовать несколько разных грузовиков.
MMB также использует массивы. Мы называем их одномерными массивами, потому что элементы массива хранятся в одной "линии" (измерении) - когда ваша программа записывает или считывает данные из массива такого вида, она использует только одну координату (порядковый номер элемента) для поиска по массиву и выполнения действий над заданным элементом. Массив в MMB представляет собой группу переменных (элементов) под одним именем, каждая из которых имеет свой адрес, поэтому мы можем обратиться к любому элементу массива. В языке MMB массивы используются так же, как и переменные. Давайте сравним их:
Слева находятся переменные (строковые и числовые), а справа - те же переменные, но в составе массивов - расширенной форме переменных, поскольку в массиве мы можем хранить больше элементов. Рассмотрим один из массивов: user_counter[n] Здесь мы видим имя массива (user_counter), две квадратные скобки [ ] и индекс элемента (n). Это общий вид массивов. Имя массива определяется так же, как и для переменных. Квадратные скобки содержат индекс элемента (адрес элемента) - числовая переменная или просто число, которое указывает MMB, к какому именно элементу массива мы обращаемся. Если вы читали разделы о числовых и строковых переменных, то вы знаете, что они могут быть использованы где угодно. Одна из функций переменных - определение адреса элемента массива. Так как адреса являются числами, то для этого используются числовые переменные. Вот несколько примеров: Массивы, в которых адрес элемента определяется простым числом: a[1] Массивы, в которых адрес элемента определяется с помощью переменной: a[i] Массивы чаще всего используются в циклах for..next, где переменные являются наилучшим решением для адресации элементов. Когда вы заполняете массив, последний элемент массива получает наибольший индекс:
Для определения адреса элемента вы даже можете использовать математические операции: a[i+1] А как же вы будете заполнять массив? Это зависит от типа массива: Числовые массивы Кроме числовых переменных, MMB может использовать для хранения чисел числовые массивы. Мы используем их для математических операций. В массивах могут храниться как целые, так и дробные числа. Давайте заполним несколько числовых массивов: a[1]=c Первый пример: в массив с именем "a[]" в качестве первого элемента записывается значение переменной "с". Второй пример: в массив с именем "my_finger[]" в качестве элемента с индексом, равным значению переменной "i", записывается число "15". Третий пример: в массив с именем "electricity[]" в качестве элемента с индексом, полученным в результате вычисления выражения "f+1", записывается значение переменной "variable_volts". Чтение элементов происходит подобным образом: c=a[1] Первый пример: переменной "c" присваивается значение первого элемента из массива "a[]". Второй пример: переменной "finger" присваивается значение элемента из массива "my_finger[]", индекс которого равен значению переменной "i". Третий пример: переменной "power" присваивается значение элемента из массива "electricity[]", индекс которого получен в результате вычисления выражения "f+1". Строковые массивы Как и строковые переменные, этот тип массивов - строковые массивы - может хранить слова, предложения и абзацы, состоящие из букв и цифр. Основное отличие от переменных - возможность хранения нескольких отдельных элементов. Строковые массивы выглядят так: a$[i] Строковый массив имеет имя массива (a), суффикс $, который указывает MMB на то, что мы используем строковый массив, квадратные скобки [ ] и адрес элемента (числовая переменная или целое число). Запись элементов в строковый массив происходит так: a$[1]=c$ Первый пример: в массив с именем "a$[]" в качестве первого элемента записывается значение переменной "с$". Второй пример: в массив с именем "finger_names$[]" в качестве элемента с индексом, равным значению переменной "i", записывается значение переменной "name$". Третий пример: в массив с именем "library$[]" в качестве элемента с индексом, полученным в результате вычисления выражения "f+1", записывается значение переменной "book$". Чтение элементов из массива: c$=a$[1] name$=finger_names$[i] book$=library$[f+1]Первый пример: переменной "c$" присваивается значение первого элемента из массива "a$[]". Второй пример: переменной "name$" присваивается значение элемента из массива "finger_names$[]", индекс которого равен значению переменной "i". Третий пример: переменной "book$" присваивается значение элемента из массива "library$[]", индекс которого получен в результате вычисления выражения "f+1". Примеры использования массивов в циклах Как уже упоминалось, массивы чаще всего используются в циклах. Вот один из примеров: For i=1 To 50 С помощью этого кода в числовой массив "a[]" будут записаны 50 элементов от 1 до 50. Индекс элемента указывается с помощью цикла for..next. Чтение элементов тоже можно выполнить с помощью цикла: For i=1 To 50 Индекс необходимого элемента указывается с помощью цикла. Каждый элемент копируется в переменную "a", затем его значение отображается в окне сообщения. Использование элементов строковых массивов в качестве имен объектов Гибкость MMB позволяет использовать элементы строковых массивов в качестве имен объектов в различных командах:
Как видно из рисунка, имена объектов Spot1, Spot2, Spot3 назначены в качестве значений элементов label$[1], label$[2], label$[3] строкового массива label$[]. Каждая команда, содержащая имя объекта, может вместо фиксированного имени использовать содержимое элемента строкового массива. Для этого вы сначала присваиваете элементу имя объекта: label$[1]='Spot1' ...затем вызываете команду, в которой необходимо указать имя объекта. Например, команду RunScript, которая в качестве единственного параметра использует имя объекта. Именно здесь можно поместить значение элемента строкового массива вместо фиксированного имени объекта: RunScript("label$[1]") Эта особенность очень полезна, если объекты имеют схожие имена (Text1, Text2, Text3...) и определенная команда повторяется для каждого объекта - например, в циклах for..next. For i=1 To 10 Для полного понимания массивов рекомендуется прочитать части руководства, касающиеся переменных и циклов. Функции, связанные с переменными Путешествие? Этим часто пользуются для изучения иностранных языков, чтобы сделать пребывание в стране более комфортным. Курсы иностранных языков? Это лучший способ привести ваши знания в приемлемую форму. Использовать компьютер? До того, как вы прочли это руководство, его части миллионы раз были переведены с помощью компьютера другими пользователями. Если говорить о MMB, то в нем мы тоже используем перевод! Выше мы обсуждали строковые и числовые переменные со всеми их различиями. Использование функций, связанных с переменными, устраняет разницу между ними.
В случае с MMB, мы выполняем преобразования между числовыми и строковыми переменными. Преобразует числовую переменную в строковую. Для указания исходной числовой переменной, которую требуется преобразовать в строковую переменную, ее имя пишется в скобках: CHAR(NumOfYears) Но это вряд ли имело бы смысл без указания конечной строковой переменной. Поэтому в левой части выражения нам необходимо поместить строковую переменную: Years$ В общем виде код для преобразования числовой переменной в строковую выглядит так: Years$=CHAR(NumOfYears) Эта строчка преобразует содержимое числовой переменной NumOfYears в текст и присвоит результат преобразования строковой переменной Years$. Этот тип преобразования (чисел в текст) применяется наиболее часто. Вот пример использования строки с данными, полученными из числовой переменной: NumOfYears=36 Результат появится в окне сообщения: Нашему пользователю 36 лет Из этого примера видно, для чего используется функция CHAR - когда вы хотите использовать значение числовой переменной в тексте. Преобразует строковую переменную в числовую. Для указания исходной строковой переменной, которую требуется преобразовать в числовую переменную, ее имя пишется в скобках: VAL(Year$) Эта функция требует указания конечной числовой переменной, в которую будет помещен результат преобразования. Поэтому в левой части выражения нам необходимо поместить числовую переменную: Year В общем виде код для преобразования строковой переменной в числовую выглядит так: Year=VAL(Year$) Эта строчка преобразует содержимое строковой переменной Year$ в число и присвоит результат преобразования числовой переменной Year. Ниже приведен пример кода с использованием функции VAL для преобразования текста в число, выполнения над ним математических операций, обратного преобразования в текст и отображения результата в окне сообщения: Year$='2006' В результате в окне сообщения появится текст: Через десять лет наступит 2016 год Из этого примера видно, для чего используется функция VAL - когда вы хотите выполнить математические действия над числами, находящимися до преобразования в текстовом формате. Округляет дробное число до ближайшего меньшего целого значения. Имя исходной переменной, значение которой требуется округлить, указывается в скобках: INT(CarTax) Эта функция требует указания конечной числовой переменной, в которую будет помещен результат. Поэтому в левой части выражения нам необходимо поместить числовую переменную: RoundCarTax В общем виде код для округления дробного числа выглядит так: RoundCarTax=INT(CarTax) Эта строчка округлит содержимое числовой переменной CarTax до целого числа и присвоит результат преобразования числовой переменной RoundCarTax. Вот пример использования функции INT на практике: CarTax=14.11 Результат отобразится в окне сообщения: Округленная плата за проезд: 14 Помните, что значение переменной округляется до меньшего целого числа. Это происходит во всех случаях: CarTax=14.99 Даже в этом случае функция INT не округлит число до большего значения: Округленная плата за проезд: 14 В MMB функция INT чаще всего используется для указания величины в процентах (например, процент выполнения задачи). Округляет дробное число и возвращает его абсолютное значение. Что означает "абсолютное"? Число может быть отрицательным. Если значение переменной меньше нуля, то знак "минус" перед числом устраняется и функция возвращает положительное число. Имя исходной переменной, абсолютное значение которой требуется получить, указывается в скобках: ABS(CupsOfCoffee) Эта функция требует указания конечной числовой переменной, в которую будет помещен результат. Поэтому в левой части выражения нам необходимо поместить числовую переменную: CoffeeCups В общем виде код для получения абсолютного значения числа выглядит так: CoffeeCups=ABS(CupsOfCoffee) Эта строчка округлит содержимое переменной CupsOfCoffee до целого значения (если это необходимо), затем, если число отрицательное, получит его абсолютное значение и поместит результат в переменную CoffeeCups. Вот пример использования функции ABS на практике: CupsOfCoffee=-5.5 Результат отобразится в окне сообщения: Количество чашек кофе в вашем заказе: 5 Функция ABS чаще всего применяется для предупреждения появления отрицательных значений переменных. Генерирует случайное число в промежутке, соответствующем значению указанной числовой переменной. Это специальная функция, связанная с переменной, но не преобразующая ее значение, а использующая его в качестве верхнего предела при генерации случайных чисел. Ограничение промежутка, в котором будут генерироваться числа, осуществляется указанием в скобках имени числовой переменной или фиксированного числа: RND(UpLimit) ...или... RND(48) Эта функция требует указания конечной числовой переменной, в которую будет помещен результат. Поэтому в левой части выражения нам необходимо поместить числовую переменную: LottoNumber В общем виде код для получения случайного числа выглядит так: LottoNumber=RND(UpLimit) ...или... LottoNumber=RND(48) Эти строки используют в качестве верхнего предела значение переменной UpLimit, или, во втором случае, фиксированное число 48, затем поместят результат в переменную LottoNumber. Полученный результат будет лежать в промежутке от 0 до верхнего предела. Вот пример использования функции RND на практике: LottoNumber=RND(48) Результат отобразится в окне сообщения: Сегодняшний счастливый номер ...и к этой строчке будет добавлено случайное число из промежутка от 0 до 48. Повторный вызов функции RND приведет к генерации числа, которое будет отличаться от предыдущих чисел. Конечно, имея ограниченный диапазон, полученные числа будут повторяться случайным образом. |
MMB Программирование без границ :: dgilmour, перевод на русский язык, 2006 :: Все права защищены :: www.mmbscript.ru