Статьи

Циклы ‘for’ и ‘while’

Циклы ‘for’ и ‘while’
ManuScript имеет цикл while, который повторяет определённый блок кода, пока проверочное выражение истинно (возвращает значение True).
Создайте новый плагин с названием Potato. Он будет писать слова известной песни ‘1
potato, 2 potato, 3 potato, 4’. Напечатайте следующие строки в методе Run нового плагина:
x = 1;
while (x<5)
{
   text = x & " potato,";
   Sibelius.MessageBox(text);
   x = x+1;
}

Запустите его. Он будет показывать ‘1 potato’, ‘2 potato’, ‘3 potato’, ‘4 potato’, хотя придётся нажимать OK после каждой фразы.
Условие цикла while следует заключать в круглые скобки ( ), а следующий за ним блок операторов – в фигурные { } (не нужно ставить точку с запятой после заключительной } фигурной скобки). Блок выполняется, пока условие истинно. В отличие от некоторых языков, фигурные скобки обязательны (нельзя их опустить, даже если блок содержит только один оператор). Кроме того, каждый блок должен содержать хотя бы один оператор. Мы говорили, что ManuScript действительно простой язык.
В этом примере видно, что значение x проверяется в начале цикла и увеличивается в конце. Более кратко эту конструкцию можно выразить в ManuScript, используя цикл for. Вышеупомянутый пример может быть реализован следующим способом:
for x = 1 to 5
{
   text = x & " potato,";
   Sibelius.MessageBox(text);
}

Здесь переменная x поочерёдно принимает значения в интервале от первого указанного числа (1) до последнего (5), остановившись от него за один шаг. По умолчанию, используемый ‘шаг’ равняется 1, но можно прировнять его, скажем, к 2, используя синтаксис for x = 1 to 5 step 2 , тогда напечатается только ‘1 potato’ и ‘3 potato’!
Заметьте, что для добавления строк используется знак &. Поскольку строка ожидается с обеих сторон, значение x преобразовывается в строку.
Также прошу заметить, как я использую клавишу Tab, чтобы выделить операторы внутри цикла. Эта хорошая привычка помогает ясно понять структуру кода. Если Вы имеете циклы внутри циклов, то должны отделять их ещё больше.

Оператор if
Теперь мы можем добавить оператор if, чтобы последняя фраза была просто‘4’, а не ‘4 potato’:
x = 1;
while (x<5)
{
   if(x=4)
   {
      text = x & ".";
   }
   else
   {
      text = x & " potato,";
   }
   Sibelius.MessageBox(text);
   x = x+1;
}

Оператор if имеет следующую форму: if (условие) {операторы}. При необходимости можно добавить блок else {операторы}, который будет выполняться, если условие ложное (возвращает значение False). Как и в цикле while, круглые и фигурные скобки обязательны, хотя Вы можете сократить программу, помещая их на тех же строчках, где расположены операторы:
x = 1;
while (x<5)
{
   if(x=4) {
      text = x & ".";
   } else {
      text = x & " potato,";
   }
   Sibelius.MessageBox(text);
    x = x+1;
}

Положение фигурных скобок – полностью зависит от вашего вкуса.
А теперь давайте сделаем наш плагин действительно клёвым. Мы можем создать эти четыре фразы в переменной с именем text, а потом показать их все сразу, чтобы сохранить вашу мышь. Мы также можем поменять местами блоки if и else, используя операцию not. Наконец, мы вернёмся к упоминаемому раньше синтаксису цикла for.
text = ""; // начинаем без какого-либо значения text<br /> for x = 1 to 5<br /> {<br />    if (not(x=4)) {<br />       text = text & x & " potato, "; // добавляем фразу
   } else {
      text = text & x & "."; // добавляем цифру 4
   }
}
Sibelius.MessageBox(text); // и в конце показываем

Арифметические операции
Мы уже использовали операцию +, а теперь приведём список всех доступных арифметических операций:
a + b //сложение
a - b //вычитание
a * b //умножение
a / b //деление
a % b //остаток деления
-a //отрицание
(a) //выполняется раньше

Эти операции выполняются в нормальной последовательности; другими словами, 2+3*4 будет 14, а не 20, потому что * выполняется перед +. Чтобы сделать код более понятным, можно написать 2+(3*4). А чтобы получить ответ 20, нужно было написать (2+3)*4.
ManuScript сейчас стал поддерживать числа с плавающей точкой, так, если в предыдущих версиях результатом операции 3/2 была бы 1, сейчас будет 1.5. Преобразование чисел с плавающей точкой в целые выполняют функции RoundUp(выражение), RoundDown(выражение) и Round(выражение), которые можно применять к любому выражению.