Что нового в Ruby 2.3?
Совсем скоро выйдет релиз Ruby 2.3.0, а пока доступен пререлиз под номером 1. Давайте посмотрим что новенького появилось.
Ставим ruby 2.3.0-preview1 через rvm, либо rbenv
1 2 3 4 5 6 |
|
~ Safe navigation operator ~
Появился новый оператор - &.
. В Ruby on Rails есть замечательный метод try!, так вот этот оператор
имеет схожую функциональность. Он выполняет проверку на nil до вызова метода у обьекта и возвращает его в случае если
сам nil, в противном случае вызывается метод после оператора.
1 2 3 4 5 6 7 8 9 |
|
Но будьте внимательны, если user
у вас будет например false
, то вы получите NoMethodError
~ Frozen string literals ~
До Ruby 2.2 строки были изменяемые, т.е мы могли взять и сделать что-то подобное str[1] = 'a'
. Если нам было необходимо
запретить изменение строки, то с помощью метода #freeze
это прекрасно получалось
Планируется использование неизменных строк по умолчанию в Ruby 3.0, разработчики хотят увеличить производительность языка,
уменьшив количество обьектов в памяти. В версии 2.3 можно включить этот режим, для этого в начало
файла нужно поместить комментарий # frozen_string_literal: true
1 2 3 4 5 6 7 |
|
~ Array#dig и Hash#dig ~
Небольшие дополнения к стандартным библиотекам, которые позволяют выполнять такие вещи:
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 |
|
~ Did you mean? ~
Появилась удобная вещь, в виде подсказки, которая предлагает вам варианты правильного вызова метода, если вы вдруг опечатались
1 2 3 4 5 |
|
~ Сравнение Hash ~
Теперь можно сравнивать hash. Вот таким образом
1 2 3 |
|
Также можно применять и другие операторы сравнения, более подробно здесь
~ Hash#to_proc ~
Hash можно преобразовать в proc обьект, причем вызвав у proc ключ из Hash вы получите значение
1 2 3 4 5 6 |
|
Иногда приходится для получения определенных значений из Hash использовать сложную конструкцию, с использованием &
это немного упрощается
1 2 3 4 5 6 7 |
|
~ Hash#fetch_values ~
Новый метод похож по своей функциональности на Hash#values_at
. Он позволяет получить значения по списку ключей.
Отличие fetch_values
в том, что если ключа не найдется, то будет брошен exception KeyError
, вместо возвращения nil
, как это
реализовано в values_at
1 2 3 4 5 |
|
~ Enumerable#grep_v ~
Если вы знакомы с утилитой grep в linux системах, то в случае если мы применим опцию -v
в вызове этой консольной утилиты,
то в результате выполнения этой команды print "test" | grep t test -v
мы ничего не получим на выходе. Эта опция позволяет вывести то что не подошло,
т.е. она противоположна grep
1 2 3 4 5 6 7 |
|
~ Numeric#positive? и #negative? ~
Добавилось несколько методов из Rails. Названия интуитивно понятны, можно обойтись без примеров
Ссылки
https://www.ruby-lang.org/en/news/2015/11/11/ruby-2-3-0-preview1-released/