Ruby 2.3 dirilis pada akhir tahun 2015. Selain adanya peningkatan peforma, terdapat beberapa fitur baru yang sebelumnya tidak ada. Berikut ini adalah beberapa fitur baru dari Ruby 2.3 yang menurut saya menarik.

Self Navigation Operator

Fitur adalah fitur favorit saya. Ruby 2.3 memperkenalkan operator baru &. sebagai nil checker sebelum memanggil method.

# versi ruby <= 2.2
if post && post.body
  post.body
end

# versi ruby 2.3
if post&.body
  post.body
end

a = nil
a&.my_method # => nil

“Did you mean?”

Fitur ini memungkinan Ruby untuk melakukan suggestion ketika terjadi NoMethodError karena tidak ada method.

irb(main):014:0> class Post; def body; puts "aloha"; end end
=> :body
irb(main):015:0> p = Post.new
=> #<Post:0x007fe29b8531c8>
irb(main):016:0> p.body
aloha
=> nil
irb(main):017:0> p.boby
NoMethodError: undefined method `boby' for #<Post:0x007fe29b8531c8>
Did you mean?  body

Frozen String Literal

Sampai pada Ruby 2.2, string by default adalah mutable dan untuk membuat string immutable, maka perlu memanggil method #freeze.

# mutable string
a = "aloha"
a[1] = "j"
puts a # => ajoha

# immutable string
b = "aloha"
b[1] = "j"
# RuntimeError: can't modify frozen String

Dengan menggunakan immutable string maka akan meningkatkan performa Ruby karena Ruby tidak perlu melakukan object allocation setiap ada string.

Oleh sebab itulah ada rencana pada Ruby 3 untuk membuat immutable string by default. Agar mempermudah transisi, pada Ruby 2.3 disediakan opsi untuk membuat string immutable by default. Opsi tersebut adalah menambahkan frozen_string_literal: true pada awal file Ruby.

# frozen_string_literal: true

str = "aloha"
str[1] = "b"

# my_file.rb:5:in `[]=': can't modify frozen String (RuntimeError)
#   from my_file.rb:5:in `<main>'

Method “Enumerable#grep_v”

Method #grep_v memungkinkan mencari dan mengembalikan elemen yang tidak sesuai.

a = ["aloha", "baloha", "caloha"]
a.grep_v /calo/
# => ["aloha", "baloha"]

Method “Numeric#positive?” dan “Numeric#negative?”

Method memungkinkan untuk mengecek apakah angka positif atau negatif, sehingga tidak perlu lagi mengecek menggunakan operator modulo %.

1.positive? # => true
-9.positive? # => false

Untuk fitur - fitur lain, Nithin Bekal telah menulis summary tentang Ruby 2.3 dengan sangat baik. Untuk isi lengkap dan kompatibilitas Ruby 2.3 silakan lihat NEWS dan ChangeLog dari repositori Ruby.