0Pricing
Ruby Academy · Урок

Шаблоны find и защитные условия

Условия при сопоставлении

«Шаблоны find и защитные условия» — бесплатный урок Ruby Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.

Условия-ограничители

Добавьте к шаблону условие-ограничитель if или unless. Ветка подходит только тогда, когда и шаблон, и условие успешно выполняются.

case 7
in Integer => n if n.odd?
  puts 'odd integer'
end

Условия используют связанные переменные

Условие-ограничитель может обращаться к переменным, связанным шаблоном, поэтому Вы можете задавать сложные условия для сопоставленных данных.

case [4, 9]
in [a, b] if a < b
  puts 'ascending pair'
end

Условия unless

Условие-ограничитель unless подходит, когда условие ложно, то есть действует противоположно if.

case 0
in Integer => n unless n.positive?
  puts 'zero or negative'
end

Несколько веток с условиями

Объединяйте условия-ограничители в разных ветках, чтобы построить понятную последовательность решений.

def grade(score)
  case score
  in Integer => s if s >= 90 then 'A'
  in Integer => s if s >= 70 then 'B'
  else 'C'
  end
end
puts(grade(85))

Шаблоны поиска

Шаблон поиска [*, x, *] ищет подшаблон в массиве в любом месте, используя распаковку с обеих сторон.

case [1, 2, 3, 4]
in [*, 3, *]
  puts 'contains a 3'
end

Связывание внутри поиска

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

case [10, 20, 30]
in [*, x, *] if x > 25
  puts("found #{x}")
end

Сохранение окружающих элементов

Обе операции распаковки в шаблоне поиска можно снабдить именами, чтобы сохранить элементы до и после совпадения.

case [1, 2, 99, 4, 5]
in [*before, 99, *after]
  p before
  p after
end

Поиск элемента заданного типа

Шаблоны поиска сочетаются с шаблонами типов, чтобы найти первый элемент заданного типа.

case [1, 'hi', 2]
in [*, String => word, *]
  puts(word)
end

Условия и шаблоны

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

case { role: 'admin', age: 40 }
in { role: 'admin', age: } if age >= 18
  puts 'adult admin'
end

Объединение поиска и условия

Шаблоны поиска и условия-ограничители вместе позволяют спросить: удовлетворяет ли какой-либо элемент этому условию?

numbers = [3, 5, 8, 11]
case numbers
in [*, n, *] if n.even?
  puts("first even-ish hit: #{n}")
end

Порядок веток

Ветки проверяются сверху вниз; побеждает первое совпадение. Располагайте более конкретные шаблоны с условиями перед общими.

case 100
in Integer => n if n > 50 then puts 'big'
in Integer then puts 'small'
end

Быстрая проверка

Что делает шаблон поиска [*, x, *]?

Итоги: шаблоны поиска и условия

Вы добавили к сопоставлению условия и поиск:

  • Условия if / unless уточняют шаблон
  • Условия могут использовать связанные переменные
  • Шаблоны поиска [*, x, *] ищут совпадение в любом месте
  • Обе операции распаковки можно именовать, чтобы сохранять окружающие элементы
  • Побеждает первая подходящая ветка, поэтому порядок имеет значение
case [1, 7, 3]
in [*, x, *] if x > 5 then puts x
end

Часто задаваемые вопросы

Урок «Шаблоны find и защитные условия» бесплатный?

Да — полный текст урока «Шаблоны find и защитные условия» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.

Чему я научусь в уроке «Шаблоны find и защитные условия»?

Условия при сопоставлении Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Ruby Academy?

Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Шаблоны find и защитные условия»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Ruby Academy?

Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы case/in
  2. Шаблоны массивов и хешей
  3. Шаблоны find и защитные условия
  4. Практические варианты применения
← Назад к Ruby Academy