Читаем Crystal Programming. Введение на основе проекта в создание эффективных, безопасных и читаемых веб-приложений и приложений CLI полностью

Объявление и использование перечислений — предпочтительный способ обработки набора известных альтернатив. Например, они позаботятся о том, чтобы вы никогда не ошиблись в написании типа пользователя. В любом случае перечисления — не единственный вариант. Crystal также имеет тип Symbol.

Символ подобен программному анонимному перечислению, которое не нужно объявлять. Вы можете просто ссылаться на символы, добавляя двоеточие к имени символа. Они могут выглядеть и ощущаться очень похожими на строки, но их имена не предназначены для проверки и манипулирования ими, как со строками; вместо этого они оптимизированы для сравнения и не могут создаваться динамически:

user_kind = :regular

puts "This user is of kind #{user_kind}"

Символы подобны тегам и однозначно идентифицируются по имени. Сравнение символов более эффективно, чем сравнение строк: они будут совпадать, если их имена совпадают. Чтобы это работало, компилятор просканирует все символы, используемые во всем исходном коде, и объединит символы с одинаковым именем. Их писать быстрее, чем правильное перечисление, но их следует использовать с осторожностью, поскольку компилятор не обнаружит орфографическую ошибку и будет просто рассматриваться как другой символ.

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

<p>Управление потоком выполнения с помощью условных выражений</p>

Crystal, как и большинство императивных языков, имеет построчный поток выполнения сверху вниз. После выполнения текущей строки следующая строка будет следующей. Но вы имеете право контролировать и перенаправлять этот поток выполнения на основе любого условного выражения, которое только можете придумать. Первый вид управления потоком, который мы рассмотрим, — это реакция на условные выражения.

<p>if и unless</p>

Оператор if можно использовать для проверки условия; если оно истинно (то есть не равно nil и не false), то оператор внутри него выполняется. Вы можете использовать else, чтобы добавить действие, если условие неверно. Посмотрите это, например:

secret_number = rand(1..5) # Случайное целое число от 1 до 5

print "Пожалуйста, введите свое предположение:"

guess = read_line.to_i

if guess == secret_number

   puts "Вы правильно догадались!"

else

   puts "Извините, номер был #{secret_number}."

end

Условное выражение не обязательно должно быть выражением, результатом которого является логическое значение (true или false). Любое значение, кроме ложных, нулевых и нулевых указателей (подробнее об указателях см. в Главе 7, «C Функциональная совместимость»), будет считаться правдивым. Обратите внимание, что нулевые и пустые строки также являются правдивыми.

Противоположностью if является unless. Его можно использовать, когда вы хотите отреагировать, когда условие является false или nil. Посмотрите это, например:

unless guess.in? 1..5

   puts "Пожалуйста, введите число от 1 до 5."

end

Оператор if также может содержать блок else, но в этом случае всегда лучше изменить порядок на обратный и использовать последовательность if-else.

И if, и unless можно записать в одну строку, вставив ее после действия. В некоторых случаях это более читабельно. Предыдущий пример аналогичен этому:

puts "Пожалуйста, введите число от 1 до 5." unless guess.in? 1..5

Вы можете объединить несколько операторов if, используя один или несколько блоков elsif. Это уникально для if и не может использоваться с unless. Посмотрите это, например:

if !guess.in? 1..5

   puts "Пожалуйста, введите число от 1 до 5."

elsif guess == secret_number

   puts "Вы правильно угадали!"

else

   puts "Извините, номер был #{secret_number}."

end

Как вы часто увидите в Crystal, эти операторы также можно использовать как выражения; они выдадут последний оператор выбранной ветки. Вы даже можете использовать блок if в середине присваивания переменной:

msg = if !guess.in? 1..5

        "Пожалуйста, введите число от 1 до 5."

      elsif guess == secret_number

        "Вы правильно угадали!"

      else

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных