Значения по умолчанию и объединение
fetch, merge, dig
«Значения по умолчанию и объединение» — бесплатный урок Ruby Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Проблема с nil
Чтение отсутствующего ключа возвращает nil, что может привести к неожиданностям в математических операциях или логике. Ruby предлагает более безопасные способы обрабатывать отсутствие значения.
h = { a: 1 }
puts h[:b].inspectБезопасный доступ с помощью fetch
fetch возвращает значение или вызывает понятную ошибку, если ключ отсутствует. Используйте его, когда ключ обязателен.
h = { name: "Ada" }
puts h.fetch(:name)fetch со значением по умолчанию
Передайте fetch второй аргумент — запасное значение, используемое только при отсутствии ключа.
h = { name: "Ada" }
puts h.fetch(:age, 0)
puts h.fetch(:name, "Unknown")fetch с блоком
Передайте блок, чтобы лениво вычислять запасное значение. Блок выполняется только при отсутствии ключа.
h = {}
puts h.fetch(:x) { "computed default" }Хеш со значением по умолчанию
Hash.new(default) возвращает значение по умолчанию для любого отсутствующего ключа вместо nil. Это значение общее для всех ключей, поэтому такой вариант лучше использовать для простых неизменяемых значений.
counts = Hash.new(0)
counts[:a] += 1
counts[:a] += 1
puts counts[:a]
puts counts[:b]Значение по умолчанию с блоком
Hash.new { |hash, key| ... } вычисляет новое значение по умолчанию для каждого ключа и идеально подходит для группировки элементов в массивы.
groups = Hash.new { |h, k| h[k] = [] }
groups[:fruit] << "apple"
groups[:fruit] << "pear"
puts groups[:fruit].inspectПодсчёт со значениями по умолчанию
Значение по умолчанию, равное 0, упрощает подсчёт слов.
words = ["a", "b", "a", "a"]
count = Hash.new(0)
words.each { |w| count[w] += 1 }
puts countОбъединение хешей
merge объединяет два хеша в новый. При конфликте побеждают ключи из второго хеша.
defaults = { color: "red", size: "M" }
user = { color: "blue" }
puts defaults.merge(user)Объединение с блоком
Передайте блоку merge, чтобы разрешить конфликты, например сложив значения.
a = { x: 1, y: 2 }
b = { y: 3, z: 4 }
puts a.merge(b) { |key, old, new| old + new }Безопасный доступ к вложенным данным с помощью dig
dig безопасно читает данные во вложенных хешах, возвращая nil, если отсутствует любой уровень, вместо аварийного завершения программы.
data = { user: { address: { city: "London" } } }
puts data.dig(:user, :address, :city)
puts data.dig(:user, :phone, :home).inspectОбъединение инструментов
Используйте значения по умолчанию вместе с объединением, чтобы создать конфигурацию из базовых значений и переопределений.
base = { retries: 3, timeout: 30 }
options = base.merge(timeout: 60)
puts options.fetch(:timeout)Быстрая проверка
Проверьте свои знания о значениях по умолчанию и объединении хешей.
Итоги
Теперь Вы умеете корректно обрабатывать отсутствующие данные:
fetchсо значением по умолчанию, блоком или строгой ошибкойHash.new(0)и значения по умолчанию с блоком для подсчёта и группировкиmergeс блоками разрешения конфликтовdigдля безопасного доступа к вложенным данным
Следующий курс: диапазоны и Enumerable.
c = Hash.new(0)
c[:hits] += 1
puts c[:hits]Часто задаваемые вопросы
Урок «Значения по умолчанию и объединение» бесплатный?
Да — полный текст урока «Значения по умолчанию и объединение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Значения по умолчанию и объединение»?
fetch, merge, dig Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Значения по умолчанию и объединение»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Символы и строки
- Создание и чтение хешей
- Итерация по хешу
- Значения по умолчанию и объединение