Шаблоны массивов и хешей
Деструктурируйте данные
«Шаблоны массивов и хешей» — бесплатный урок Ruby Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Шаблоны массивов
Шаблон массива сопоставляется по позиции и длине. Каждый шаблон элемента проверяется против соответствующего элемента.
case [1, 2, 3]
in [1, 2, 3]
puts 'exact match'
endСвязывание элементов массива
Используйте идентификаторы, чтобы сохранить каждую позицию в переменную.
case [10, 20]
in [x, y]
puts(x + y)
endДлина имеет значение
По умолчанию шаблон массива требует точного совпадения длины. Шаблон из двух элементов не подойдёт для массива из трёх элементов.
case [1, 2, 3]
in [a, b]
puts 'two'
in [a, b, c]
puts 'three'
endРаспаковка остальных элементов
Оператор распаковки *rest сохраняет любое количество оставшихся элементов в массив, делая длину гибкой.
case [1, 2, 3, 4]
in [first, *rest]
puts(first)
p rest
endРаспаковка в середине
Оператор распаковки может находиться между фиксированными элементами, чтобы получить начало и конец, игнорируя середину.
case [1, 2, 3, 4, 5]
in [first, *, last]
puts("#{first} ... #{last}")
endШаблоны хэшей
Шаблон хэша сопоставляется по ключам. Он проверяет наличие указанных ключей и соответствие их значений; дополнительные ключи разрешены.
case { name: 'Ada', age: 36 }
in { name: 'Ada' }
puts 'found Ada'
endСвязывание значений хэша
Сохраните значение, указав для ключа имя привязки. Если записать только ключ, он будет связан с переменной с таким же именем.
case { name: 'Bob', age: 25 }
in { name: String => n, age: Integer => a }
puts("#{n} is #{a}")
endСокращённая привязка ключей
Если не указывать шаблон после ключа, переменная автоматически получает имя этого ключа.
case { city: 'Istanbul' }
in { city: }
puts(city)
endЗапрет дополнительных ключей
По умолчанию шаблоны хэшей игнорируют дополнительные ключи. Добавьте **nil, чтобы потребовать наличия только перечисленных ключей.
case { a: 1 }
in { a: 1, **nil }
puts 'exactly one key'
endВложенные шаблоны
Шаблоны можно свободно вкладывать, выполняя деконструкцию глубоких структур в одной ветке.
data = { user: { name: 'Ada', tags: ['admin', 'dev'] } }
case data
in { user: { name:, tags: [first_tag, *] } }
puts("#{name}: #{first_tag}")
endСопоставление разобранных данных JSON
Сопоставление с шаблонами отлично сочетается с разобранными данными JSON или CSV, извлекая именно нужные поля.
require 'json'
resp = JSON.parse('{"status":"ok","items":[1,2,3]}', symbolize_names: true)
case resp
in { status: 'ok', items: }
puts(items.sum)
endБыстрая проверка
Будет ли по умолчанию шаблон хэша in { a: 1 } соответствовать хэшу { a: 1, b: 2 }?
Итоги: шаблоны массивов и хэшей
Теперь Вы умеете выполнять деконструкцию коллекций:
- Шаблоны массивов сопоставляются по позиции и длине
*restсохраняет оставшиеся элементы- Шаблоны хэшей сопоставляются по ключу и допускают дополнительные ключи
- Сокращённая запись
{ key: }связывает переменные с таким же именем **nilзапрещает дополнительные ключи; шаблоны могут быть глубоко вложенными
case { id: 1, items: [9, 8] }
in { items: [head, *] } then puts head
endЧасто задаваемые вопросы
Урок «Шаблоны массивов и хешей» бесплатный?
Да — полный текст урока «Шаблоны массивов и хешей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Шаблоны массивов и хешей»?
Деструктурируйте данные Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Шаблоны массивов и хешей»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы case/in
- Шаблоны массивов и хешей
- Шаблоны find и защитные условия
- Практические варианты применения