В предыдущей статье мы познакомились с условным оператором, оператором выбора switch и оператором цикла for, который использует счетчик при выполнении каждой итерации (при каждом проходе цикла). Но часто возникают ситуации, когда мы не можем заранее знать, сколько именно раз придется выполнять определенную последовательность действий. Например, когда необходимо дождаться какого-либо события и пр. В таком случае, удобно применять операторы цикла с проверкой некоего условия.
Оператор while
Одним из таких операторов является оператор цикла while. Давайте рассмотрим его общий вид и реальный пример.
В качестве условия выполнения цикла используется результат проверки условия в Выражение, которое передается в качестве входящего аргумента в круглых скобках сразу после ключевого слова while.
Если в результате вычисления этого выражения возвращается результат true, то выполняется оператор, расположенный за круглыми скобками.
Напомню, что там где требуется наличие всего одного оператора (как в случаях с условным оператором if, оператором выбора switch, операторами циклов for и while), мы всегда можем использовать составной оператор, представляющий из себя группу простых операторов, заключенные в фигурные скобки.
Если в результате вычисления выражения был получен результат false, то оператор не будет выполнен ни разу. Таким образом, используя оператор цикла while, цикл может быть выполнен ноль или более раз.
Обратная ситуация возникает в том, что в ходе выполнения цикла выражение может не изменить своего значения на false, и, таким образом, цикл никогда не прекратится. Такие циклы называют бесконечными. Именно поэтому в теле цикла обязательно нужно следить за изменением значения выражения, чтобы избежать бесконечного цикла.
В некоторых случаях специально организуют бесконечные циклы и выходят из них принудительно внутри тела цикла, но это вызывает дополнительную нагрузку на компьютер и считается дурным тоном программирования.
В рассмотренном выше примере осуществляется поиск символа обратной косой черты ( \ ) в имени файла.
Другими словами, цикл выполняется до тех пор, пока выполняется условие выражения (результат выполнения выражения является true) и перестает выполняться в том случае, когда условие выражения принимает значение false. При этом цикл может быть выполнен несколько раз, а может быть не выполненным ни разу.
Такую форму оператора цикла while называют циклом с предусловим — когда условие проверяется перед выполнением цикла.
Оператор do — while
Существует также другая разновидность оператора while — оператор цикла с постусловием — когда проверка условия выполняется после каждого выполнения итерации цикла.
В таком виде оператора while цикл будет выполнен хотя бы один раз. Затем, если условие не выполняется (значение выражения равно false), то цикл завершится, и вторая итерация выполнена не будет. Если же значение выражения будет true, то цикл будет выполняться дальше.
Операторы break и continue
Время от времени возникают ситуации, когда продолжение выполнения цикла теряет всякий смысл, и нам требуется досрочно его завершить, не выполняя оставшиеся далее операторы.
Для этого используются операторы прерывания цикла — break и continue. Разница между этими операторами заключается в первую очередь в том, что оператор break после прерывания текущей итерации цикла, также завершает и весь цикл, передавая управление следующему оператору, находящемуся сразу после оператора цикла.
Данный оператор мы использовали в операторе выбора switch в предыдущей статье, чтобы избежать выполнения всех нижележащих операторов из других веток. Точно также он используется и при прерывании циклов.
Оператор continue, в свою очередь, передает управление на начало цикла, начиная тем самым новую итерацию.
Тернарный оператор
Ранее в предыдущей статье мы рассматривали условный оператор if-else, которые выполнял различные операторы, в зависимости от результата проверки условия.
В языке программирования MQL имеется также его упрощенная форма. Данная конструкция получила тернарная операция, так как в отличие от бинарных операций (операции присваивания или сравнения) использует сразу три параметра:
Выражение1 ? Выражение2 : Выражение3
Выражение1 представляет собой любое выражение, результатом вычисления которого является результат true или false, как и в случае с обычным условным оператором. Если Выражение1 истинно (true), то выполняется Выражение2, если ложно (false), то выполняется Выражение3.
Таким образом, тернарный оператор является ничем иным, как альтернативной формой записи условного оператора if.
В примере выше в комментарии ниже приведен полный аналог условного оператора, соответствующий тернарному оператору из примера.
Заключение
Мы познакомились с операторами цикла с пред- и постусловием, разобрали разницу между ними. Также мы рассмотрели способы досрочного входа из цикла при помощи операторов break и continue. Также мы познакомились с альтернативной формой записи условного оператора - тернарным оператором.