Другое

Управление ходом исполнения программного кода в ЯП Crystal.(06)

Lorem ipsum dolor

Управление ходом исполнения программного кода.

Теперь, когда вы овладели основным набором переменных, пришло время проводить решения с их помощью. Как любой язык программирования, Crystal имеет ряд конструкций для управления прогоном кода; и они позволяют вам разметить маршрут для пробега сквозь алгоритмы вашей программы.

Мы начнем с некоторых из них прямо здесь и рассмотрим ещё больше информации в Главе 3 («Контроль над типами переменных и Управление потоком»).

 

СОВЕРШЕНИЕ ВЫБОРА.

Crystal предлагает классическое выражение if с вариациями, что позволяет вам создавать сложные структуры. A простое выражение if проверяет соответствие условию и делает что-нибудь, если это условие выполнено:

===

found...

...

\фрагмент кода изъят для повышения уникальности, сверяйтесь с книгой-оригиналом\

===

В этом случае 7 меньше, чем 8, поэтому Crystal выведет сообщение "мягче топаза". Если бы значение твердости оказалось больше или равным 8, условие не было бы выполнено, и выражение if не сделало бы ничего. Crystal также поддерживает усложненные выражения if, включая операторы elsif и else, чтобы проверить больше условных "веток" за один подход. (В целях поддержания "читабельности" кода делайте записи условных конструкций схожими с одиночной инструкцией if.)

===

foundat...

...

\фрагмент кода отсутствует...\

===

В этом случае первая условная проверка, на начальном if, не дает совпадений. Вторая, на elseif,

оказалась успешной. Последняя проверка, else, которая используется, если ни одно из других условий не сработало, в данном случае не будет вызвана.

Когда Crystal сопоставляет условия, он вычисляет, истинны они или фальшивы, но разделение на "верно или ложно" не будет абсолютно точным. Crystal имеет довольно ограниченное представление "ошибочного", рассматривая false и nil (и пустые указатели) как фальшивые, а всё остальное — "true"; цифры, ноль, строки, массивы — вам представляются как истинное.

Каждая ветвь выражения if возвращает некое значение, поэтому можно комбинировать операцию присваивания переменной с конструкцией if для создания избирательных назначений.

===

fo...

...

===

Вы можете также записать оператор if в виде суффикса, добавляемого в конце назначения переменной.

===

f...

...

===

В зависимости от состояния, которое вы проверяете, оно может быть более читаемым, благодаря использованию unless, вот так:

===

f...

...

===

Хотя выражения if легко читаются и удобны для простых условий, они могут быстро "раздуться" до неприличия, порождая "громоздкий код". Если вы хотите протестировать какое-то значение на соответствие разным условиям, выражение case-when может создать код, который будет удобнее для восприятия.

===

f...

...

===

Можно также создать выражение case-when, которое делает возможным использование условных конструкций, почти таких же, как для оператора if.

===

f...

...

===



СКРУЧИВАНИЕ ПЕТЛИ (зацикливание).

Иногда возникает надобность выполнить блок кода фиксированное количество раз. Вы можете использовать специальный метод times для типа 'Int'. Либо можно охватить блок кода с помощью двойного оператора "do ... end" так, чтобы он содержал внутри несколько строк кода; вместо него можно использовать {;;}, где строки кода разделяет точка с запятой.

===

f...

...

===

Это просто, зато быстро: метод times работает так же быстро, как цикл языка программирования C, потому что он интегрируется в исполняемый код. Иногда вам требуется не просто выполнить код определенное количество раз, а ещё и охватить диапазон значений.

Тогда вы можете использовать ещё один тип языка Crystal, называемый Range. Вы объявляете диапазоны, используя синтаксис вида 2..7 (см. пример ниже), а в общем случае отмечаете начало и конец (start..end).

Результат содержит все элементы от начала до конца включительно. (Вы можете использовать '...' для создания эксклюзивного диапазона, отбрасывающего конечное значение.) Начальные и конечные значения могут быть целыми числами, символами, или даже строками. Если вы желаете просмотреть значения диапазона, то потребуется преобразовать их в массивы с помощью 'to_a'.

===

f...

...

===

Диапазоны имеют метод each, который позволяет сделать что-либо с каждым из элементов последовательно. Это может быть полезным, например, для извлечения набора значений из массива.

===

foundatio...

...

\смотрите книгу-оригинал\

===

Если вам нужно обработать каждое значение в массиве, то можно, не связываясь с диапазонами, просто примените метод each к вашему массиву.

===

f...

...

===

Если вы хотите создать собственную логику для циклов, Crystal предлагает очень простую конструкцию цикла "loop do ... end". Она начинается как бесконечный цикл, поэтому необходимо выйти из нее с явным разрывом (break):

===

f...

...

===

Crystal также реализует типичную конструкцию цикла while, которая "гоняет" цикл до тех пор, пока заданное условие не становится ложным (false):

===

f...

...

===

Опираясь на истинность предшествующей условной инструкции, next переходит к следующей итерации цикла (т.е. возвращается к его первой строке), тогда как break выходит из цикла (когда переменная вырастет до 7). Кроме того, если вы проверяете варианты, в которых условие не соответствует истине, вы можете сделать исходный код легче для чтения, написав 'until condition' вместо "while !condition".

___

!! Пустые строки.

Принятая в Crystal система обозначений для символьных и стоковых литералов имеет больше общего со спецификацией языка программирования C, нежели с Ruby, который не имеет явного типа Chars для отдельных символов. Имейте в виду, что пустой символьный литерал не существует в Crystal: если вам нужна пустая строка, используйте "".

 

ВАШ ВЫХОД 4 (Практическое задание 4).

Напишите программу Crystal, используя «while» и «if», которая правильно напечатает текст этой песни [сноска 26]. В качестве бонуса, попробуйте также применить метод Int32 # downto.

 

Схожие статьи

Язык Quipper — квантовое программирование с высокоуровневыми конструкциями
Другое

Язык Quipper — квантовое программирование с высокоуровневыми конструкциями

Другое

MacBook Pro: замена оперативной памяти. Как ее увеличить

Другое

Какую роль играет ИБП в серверной?

Протокол IPV6 недоступен: как это исправить? Подробная инструкция
Другое

Протокол IPV6 недоступен: как это исправить? Подробная инструкция

×