るびくる: | |
RB(あーるびー): |
(ドタドタドタ) |
|
(ガラッ)RB! Facetsのライブラリについて教えて! |
|
この最初にドアを開けるくだり、もしかして前回だけじゃなくて毎回やるの? |
それじゃ今回は、facets/kernel/tryを紹介するよ。 |
|
前回のパート1で、RBが例に出してたやつだね。 |
|
その通り。 |
# encoding: utf-8 require 'facets/kernel/try' #------------------------------------------------------------------------------- # try: 後ろに続くメソッドを、通常通りに呼び出すが # nilに対して存在しないメソッドを呼び出した場合でもエラーにならない(nilを返す) # # 主に「nilかもしれない変数」に対して、なにかのメソッドを呼び出したいときに使う options = {:output_path => ' /var/gems/1.9.1/ '} @stripped_path = options[:output_path].try.strip p @stripped_path # => "/var/gems/1.9.1/" options = {} @stripped_path = options[:output_path].try.strip p @stripped_path # => nil # 上記のコードと同じ意味の処理を、tryメソッドなしで書くとこうなる options = {:output_path => ' /var/gems/1.9.1/ '} @stripped_path = (options[:output_path].nil? ? nil : options[:output_path].strip) p @stripped_path # => "/var/gems/1.9.1/" options = {} @stripped_path = (options[:output_path].nil? ? nil : options[:output_path].strip) p @stripped_path # => nil # tryメソッドに、直接メソッド名や引数を渡すこともできる 'rubicle'.try.slice(0..4) # => "rubic" 'rubicle'.try(:slice, 0..4) # => "rubic" # 注意点:nil以外のオブジェクトに対して存在しない名前のメソッドを呼ぶと、通常通りNoMethodErrorが発生する nil.try.strip # => nil 100.try.strip # => # ~> -:36:in `<top (required)>': undefined method `strip' for 100:Fixnum (NoMethodError) # ~> from -e:1:in `load' # ~> from -e:1:in `<main>' # ~> !XMP1431260298_1208_763152![1] => String "/var/gems/1.9.1/" # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![2] => NilClass nil # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![3] => String "/var/gems/1.9.1/" # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![4] => NilClass nil # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![5] => String "rubic" # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![6] => String "rubic" # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![7] => NilClass nil # ~> options # ~> _xmp_1431260298_1208_591716
サンプルコードを見てもらえば分かるとおり、使い方自体がシンプルだから |
|
お願いします! |
#------------------------------------------------------------------------------- # try: 後ろに続くメソッドを、通常通りに呼び出すが # nilに対して存在しないメソッドを呼び出した場合でもエラーにならない(nilを返す) # # 主に「nilかもしれない変数」に対して、なにかのメソッドを呼び出したいときに使う options = {:output_path => ' /var/gems/1.9.1/ '} @stripped_path = options[:output_path].try.strip p @stripped_path # => "/var/gems/1.9.1/" options = {} @stripped_path = options[:output_path].try.strip p @stripped_path # => nil # 上記のコードと同じ意味の処理を、tryメソッドなしで書くとこうなる options = {:output_path => ' /var/gems/1.9.1/ '} @stripped_path = (options[:output_path].nil? ? nil : options[:output_path].strip) p @stripped_path # => "/var/gems/1.9.1/" options = {} @stripped_path = (options[:output_path].nil? ? nil : options[:output_path].strip) p @stripped_path # => nil
まずはtryメソッドの、基本的な使い方の例だね。 |
|
確か、前回の話では……
ってことだったよね。 |
|
そう。この処理は、もちろんtryメソッドを使わなくても書くことはできるんだけど |
|
見た目もすごくおしゃれな感じだし、いろいろな場面で使うことができそうだね! |
# tryメソッドに、直接メソッド名や引数を渡すこともできる 'rubicle'.try.slice(0..4) # => "rubic" 'rubicle'.try(:slice, 0..4) # => "rubic"
これはtryメソッドの別記法。 |
|
メソッド名(Symbol)をtryメソッドの引数に渡すこともできるんだね。 |
|
|
# 注意点:nil以外のオブジェクトに対して存在しない名前のメソッドを呼ぶと、通常通りNoMethodErrorが発生する nil.try.strip # => nil 100.try.strip # => # ~> -:36:in `<top (required)>': undefined method `strip' for 100:Fixnum (NoMethodError) # ~> from -e:1:in `load' # ~> from -e:1:in `<main>' # ~> !XMP1431260298_1208_763152![1] => String "/var/gems/1.9.1/" # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![2] => NilClass nil # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![3] => String "/var/gems/1.9.1/" # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![4] => NilClass nil # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![5] => String "rubic" # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![6] => String "rubic" # ~> options # ~> _xmp_1431260298_1208_591716 # ~> !XMP1431260298_1208_763152![7] => NilClass nil # ~> options # ~> _xmp_1431260298_1208_591716
で、最後にtryメソッドの使い方に関する注意。 |
|
あくまで対nil用限定のメソッド、ってことなんだね。 |
|
そうだね、僕もそこの意図ははっきりとはわからないないんだけど |
それじゃ、今回のパート2は短いけどこれでおしまい。 |
|
ちょっと待ってRB! |
|
うん。次回は5つくらいのメソッドを一度に紹介する予定だから、その分どうしても長くはなっちゃうだろうね。 |
|
だったら、今回みたいな「最初にサンプルコードを全部出して、その後にコードを少しずつ解説していく」ってやり方じゃなくて |
|
そうだね、わかりやすくするって意味ではそっちの方がいいんだけど…… |
|
あー。確かにわたしたちの記事、「会社では周りの目が気になって読みづらい」って評判があるもんね……。 |
パート3:facets/time編に続きます。