012 Управляющие структуры
Zephir реализует упрощенный набор структур управления, присутствующих в подобных языках, таких как C, PHP и т.д.
Условные
Оператор If
Оператор ‘if’ оценивает выражение, выполняет свой блок, если оценка true. Фигурные скобки обязательны, ‘if’ может иметь необязательное предложение ‘else’, несколько конструкций ‘if’/’else’ могут быть соединены вместе:
if false { echo "false?"; } else { if true { echo "true!"; } else { echo "neither true nor false"; } }
Вы также можете использовать ‘elseif’:
if a > 100 { echo "слишком много"; } elseif a < 0 { echo "слишком мало"; } elseif a == 50 { echo "идеально!"; } else { echo "сойдет"; }
Скобки в оцениваемом выражении необязательны:
if a < 0 { return -1; } else { if a > 0 { return 1; } }
Оператор Switch
Оператор ‘switch’ сравнивает выражение с рядом предопределенных значений литералов, и выполняет соответствующий блок ‘case’ или в случае неудачи, выполняет блок ‘default’:
switch count(items) { case 1: case 3: echo "odd items"; break; case 2: case 4: echo "even items"; break; default: echo "unknown items"; }
Циклы
Цикл While
‘While’ обозначает цикл, который выполняет итерацию, пока его заданное условие принимает значение true:
let counter = 5; while counter { let counter -= 1; }
Цикл Loop
В дополнение к ‘while’, ‘loop’ может использоваться для создания бесконечных циклов:
let n = 40; loop { let n -= 2; if n % 5 == 0 { break; } echo x, "\n"; }
Цикл For
Цикл ‘for’ является структурой управления, которая позволяет перебирать массивы или строки:
for item in ["a", "b", "c", "d"] { echo item, "\n"; }
Ключи в хэшах можно получить следующим образом:
let items = ["a": 1, "b": 2, "c": 3, "d": 4]; for key, value in items { echo key, " ", value, "\n"; }
Цикл ‘for’ также может быть проинструктирован об обходе массива или строки в обратном порядке:
let items = [1, 2, 3, 4, 5]; for value in reverse items { echo value, "\n"; }
Цикл ‘for’ может использоваться для перемещения по строковым переменным:
string language = "zephir"; char ch; for ch in language { echo "[", ch ,"]"; }
В обратном порядке:
string language = "zephir"; char ch; for ch in reverse language { echo "[", ch ,"]"; }
Стандартный ‘for’, который проходит диапазон целочисленных значений, можно записать следующим образом:
for i in range(1, 10) { echo i, "\n"; }
Чтобы избежать предупреждений о неиспользуемых переменных, можно использовать анонимные переменные в операторах for, заменив имя переменной заполнителем _:
// Используйте ключ, но игнорируйте значение for key, _ in data { echo key, "\n"; }
Оператор break
‘break’ завершает выполнение текущих операторов ‘while’, ‘for’ или ‘loop’:
for item in ["a", "b", "c", "d"] { if item == "c" { break; // exit the for } echo item, "\n"; }
Оператор continue
‘continue’ используется внутри структур цикла, чтобы пропустить оставшуюся часть текущей итерации цикла и продолжить выполнение при оценке условия, а затем в начале следующей итерации.
let a = 5; while a > 0 { let a--; if a == 3 { continue; } echo a, "\n"; }
Оператор require
Инструкция ‘require’ динамически включает и вычисляет указанный PHP-файл. Обратите внимание, что файлы, включенные через Zephir, интерпретируются Zend Engine как обычные PHP-файлы. ‘Require’ не позволяет включать другие файлы Zephir во время выполнения.
if file_exists(path) { require path; }
Оператор let
Оператор ‘let’ используется для изменения переменных, свойств и массивов. Переменные по умолчанию неизменяемые, и эта команда делает их изменяемыми:
let name = "Tony"; // простая переменная let this->name = "Tony"; // свойство объекта let data["name"] = "Tony"; // индекс массива let self::_name = "Tony"; // статическое свойство
Также эта инструкция должна использоваться для увеличения/уменьшения переменных:
let number++; // инкремент простой переменной let number--; // декремент простой переменной let this->number++; // инкремента свойства объекта let this->number--; // декремент свойства объекта
Множественные изменения могут быть выполнены в единственной операции ‘let’:
let price = 1.00, realPrice = price, status = false;