Ruby2.1 変更点メモ

変更点中で、個人的に注意するところだけをメモ


キーワード引数


キーワード引数を必須にできるようになった


def something(x:, y:)
end

something
# => ArgumentError: missing keywords: x, y

Arrayにto_hがついた


 x = [[:id, 1], [:name, "foo"]]
x.to_h
# => {:id=>1, :name=>"foo"}

Timeout.timeout


Timeout.timeoutのブロック中でrescue Exceptionできるようになった
※一定時間内で終わらなかった場合にTimeout::Errorをraiseする機能でTimeout.timeout(1) {}で1秒以内に終わらなかった場合はTimeout::Errorがraiseされる


require 'timeout'
begin
Timeout.timeout(1) do
begin
sleep 2
rescue Exception
puts "timeout block"
end
end
rescue Exception
puts "Exception!!"
end

# Ruby 2.0の場合
# => "timeout block"
# Ruby 2.1の場合
# => Exception!!

Numeric#step


ちょっと見やすくできるようになった


0.step(by: 5, to: 20){|i| puts i }

同じコードをRuby2.0でやる場合


0.step(20, 5){|i| puts i}

lambda


lambda中でreturnできるようになった


def call_with_yield
yield
end

def test
call_with_yield(&lambda {return "hello from lambda"})
"hello from method"
end

test

# Ruby 2.0
# => hello from lambda
# Ruby 2.1
# => hello from method

他にも


Process.setproctitleでプロセスタイトルを設定できたり、
GC周りが大きく変わっていたり、
String#scrubだったり、
refineが警告でなくなったり、、、


参考サイト


http://globaldev.co.uk/2014/05/ruby-2-1-in-detail/

スポンサーサイト

Ruby リファクタリングテクニック

こんにちわ。ネタはあるのですが、忙しくなっているので、RubyweeklyのIssue 192に記載があった記事からネタを抜粋します


その前にRuby Weeklyって?


その週のRubyに関するホットな話題を提供してくれるメールマガジンです。
Bitcoin weeklyとかJavascript weeklyとかいろいろあります。
(英語ですが、、、)


Ruby weeklyのIssue192にはこんな記事が取り上げられていました。
tdd is dead long live testing
そして、Ruby weeklyのIssue193にはこんな記事が取り上げられていました。
test induced design damage
どちらもDHH氏の記事なのですが、こういった話題にもついていけたり、いけなかったり。。。


本題のリファクタリングテクニック


元記事はこちら Refactoring techinques
上記記事を引用
引用元のほうが例が豊富なので一読してみるといいでしょう。
Tempの扱い方の例が多かったかな。。。


やりがちな eachつかって欲しいものだけ取り出す例


select使えよこらーの例


# Bad case
managers = []
employees.each do |e|
managers << e if e.manager?
end

# Good case
managers = employees.select { |e| e.manager? }

Temp使いすぎ!な例


# Bad case
class College
def create_course
puts "create course"
end

def add_student
puts "add student"
end
end

temp = College.new
temp.create_course
temp.add_student
temp.add_student
temp.add_student

self返したり、クラスメソッドで生成するようにして、生成したオブジェクトを返すように修正。
メソッドチェインで欲しいデータを作る例


# Good case
class College
# static method so can be accessed without creating an instance
def self.create_course
college = College.new
puts "create course"
college # return new object instance
end

def add_student
puts "add student"
self # refers to the new object instance
end
end

college = College.create_course
.add_student
.add_student
.add_student

Javascript編


ruby2.0の named paramter使いたいなーという時


# Bad case
function turnOnTheTV(c, v){}
turnOnTheTV(101, 10);

# Good case
function turnOnTheTV (config) {
// config.channel === 101
// config.volume === 10
}
turnOnTheTV({ channel: 101, volume: 10 });

段々雑になってしまいました。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。