Leon's Blogging

Coding blogging for hackers.

用 Try 來防止 Nil

| Comments

在 rails 當中,經常會出現 nil 值,而爆錯,所以經常要去判斷 這個 try 就是簡化這個判斷產生的,懂得使用的話會非常好用。

但缺點就是每個地方都要去設定,即使是同一個值 因此另外一個解決方式就是用之前介紹的 delegate 也可以達到同樣的效果。

try

1
2
3
4
5
6
7
# without try
unless @number.nil?
  @number.next
end

# with try
@number.try(:next)

將原本要寫三行簡短成一行。

1
2
3
4
5
6
7
8
9
10
@user = User.create(name: "hello")
@user.try(:name=, "haha")
#@user.name = "haha" unless @user.nil?

@user.name
#=> "haha"

#若改成@user.try(:name<<, "haha")
#則會變成Operation 的 << 而爆錯
#@user.name << "haha" unless @user.nil?

也可以放入 block

1
#@user.try { |u| "#{u.first_name} #{u.last_name}" }

用try 防止例外出現

1
2
3
4
5
6
7
8
9
#假設 @user = nil

@user.age
#=> NoMethodError: undefined method `age' for #<User:0x007f80b74c70e0>
#因為 nil.age

@user.try(:age)
#=> nil
#因為 nil.age unless nil

參考文件: try - rails_github try

Comments