Что нового в 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/