A versão 2.5.0-preview1
da linguagem Ruby acaba de ser liberada.
Por não se tratar de uma versão estável, seu uso ainda não é recomendado.
Novas funcionalidades
Backtrace invertido
O backtrace (lista de métodos que foram executados antes de um erro acontecer) vai começar a ser exibida em ordem inversa.
Usando o seguinte código como exemplo:
ruby
def a
b
end
def b
c
end
def c
raise 'error'
end
a
Executando com Ruby 2.4:
bash$ ruby teste.rb
teste.rb:10:in `c': error (RuntimeError)
from teste.rb:6:in `b'
from teste.rb:2:in `a'
from teste.rb:13:in `<main>'
Executando com Ruby 2.5:
bashTraceback (most recent call last):
3: from teste.rb:13:in `<main>'
2: from teste.rb:2:in `a'
1: from teste.rb:6:in `b'
Rescue/else/ensure serão permitidos dentro de blocos do/end
Executando com Ruby 2.4:
Atualmente nós só conseguimos capturar exceptions
dentro de métodos ou blocos begin
/end
, ou seja:
rubybegin
raise 'boom'
rescue Exception => e
puts "Erro capturado: #{e.message}"
end
Saída: Erro capturado: boom
.
rubydef meu_metodo
raise 'boom'
rescue Exception => e
puts "Erro capturado: #{e.message}"
end
meu_metodo
Saída: Erro capturado: boom
.
Porém o código abaixo não funciona:
ruby[1, 2, 3].map do |i|
raise 'boom'
rescue Exception => e
puts "Erro capturado: #{e.message}"
end
syntax error, unexpected keyword_rescue, expecting keyword_end
rescue Exception => e
Executando com Ruby 2.5:
Na versão que está para ser lançada, isso é possível. A saída do código acima será:
Erro capturado: boom
Erro capturado: boom
Erro capturado: boom
Novo método yield_self
Yields self to the block and returns the result of the block.
Apesar de ser muito parecido com o método tap
da classe Object
(que é muito útil, diga-se de passagem), seus retornos são diferentes.
Enquanto que com o método tap
você abre um bloco e no final o próprio objeto é retornado, com o yield_self
, o resultado do bloco é retornado.
Exemplo:
rubyobjeto.tap { |obj| obj.save }
rubyobjeto.yield_self { |obj| obj.save }
Não consegui pensar em um caso prático pra usá-lo, mas com certeza teve uma razão para ter sido adicionado :)
Outras mudanças
Para instalar o Ruby 2.5 (apesar de ainda não recomendado por não ser uma versão estável) através do RVM, basta rodar:
rvm install 2.5.0-preview1
Happy hacking!