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

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

      end

puts msg

Это может быть полезно, чтобы избежать повторения или выполнить сложную логику внутри другого выражения. Существует также сокращенная версия, если использовать условие ? истинное утверждение : структура ложного утверждения. Это часто называют тройным:

puts "Вы догадались #{guess == secret_number ? "правильно" : "неправильно"}!"

Часто вы не смотрите на проверку условных операторов, а вместо этого выбираете один из нескольких вариантов. Здесь на помощь приходит оператор case, объединяющий длинную последовательность операторов if.

<p>case</p>

case похож на оператор if, но позволяет определить несколько возможных результатов в зависимости от заданного значения. Вы указываете оператор case с некоторым значением и одним или несколькими вариантами, проверяющими различные возможности. Вот структура:

case Time.local.month

when 1, 2, 3

  puts "Мы в первом квартале"

when 4, 5, 6

  puts "Мы во втором квартале"

when 7, 8, 9

  puts "Мы в третьем квартале"

when 10, 11, 12

  puts "Мы в четвертом квартале"

end

Это прямой эквивалент гораздо более длинной и менее читаемой последовательности операторов if:

month = Time.local.month

if month == 1 || month == 2 || month == 3

  puts "Мы в первом квартале"

elsif month == 4 || month == 5 || month == 6

  puts "Мы во втором квартале"

elsif month == 7 || month == 8 || month == 9

  puts "Мы в третьем квартале"

elsif month == 10 || month == 11 || month == 12

  puts "Мы в четвертом квартале"

end

Оператор case также можно использовать с диапазонами:

case Time.local.month

when 1..3

  puts "Мы в первом квартале"

when 4..6

  puts "Мы во втором квартале"

when 7..9

  puts "Мы в третьем квартале"

when 10..12

  puts "Мы в четвертом квартале"

end

Его также можно использовать с типами данных вместо значений или диапазонов:

int_or_string = rand(1..2) == 1 ? 10 : "привет"

case int_or_string

when Int32

  puts "Это целое число"

when String

  puts "Это строка"

end

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

Как и оператор if, оператор case также может иметь ветвь else, если ни один из параметров не соответствует:

case rand(1..10)

when 1..3

  puts "Я кот"

when 4..6

  puts "Я собака"

else

  puts "Я случайное животное"

end

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

<p>while и until loops</p>

Оператор while аналогичен оператору if, но он повторяется до тех пор, пока условие не станет ложным. Посмотрите это, например:

secret_number = rand(1..5)

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

guess = read_line.to_i

while guess != secret_number

  puts "Извините, это не то. Пожалуйста, попробуйте еще раз: "

  guess = read_line.to_i

end

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

Аналогично, оператор until является противоположностью оператора while, так же, как оператор unless является противоположностью оператора if:

secret_number = rand(1..5)

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

guess = read_line.to_i

until guess == secret_number

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

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

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

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

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

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

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

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

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