Шаблоны 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 — локальная установка не требуется.
Все уроки этого курса
- Основы case/in
- Шаблоны массивов и хешей
- Шаблоны find и защитные условия
- Практические варианты применения