行数的には約50行と少ないけど、結構ためになる!!
とりあえずRubyは、弱者なので知らないことだらけだ。
is_a?メソッド
Rubyで、Javaでいうinstanceof演算子やC#でいうis演算子みたいな動きをするものの存在を知った。
is_a?メソッド!
お試しコード
class Foo
end
class Bar
end
f = Foo.new
puts f.is_a?(Foo) # => true
puts f.is_a?(Bar) # => false
最後にハッシュを受け取るメソッド
Ruby on Railsのサンプルコードとかを見ると、よく最後の引数がハッシュのものがよく見られる。
f.bar("Hello", "world", {:a => true, :b => "hoge"})
みたいなヤツです。
ハッシュで渡すものは、オプション的な扱いなもので別に渡さなくても大丈夫っていうのが多い。
それの実装方法は、先ほどのis_a?メソッドを使ってハッシュかどうか判別している。
具体例を出すと下のような感じ。
def myprint *arg
hash = arg.last.is_a?(Hash) ? arg.pop : {} # ここで引数の最後からHashを取り出してる!
if hash[:concat]
puts arg.join(" ") # concatにtrueが設定されてたら、引数で渡されたものをくっつけて出力
elsif
arg.each { |value| puts value } # concatにtrueが設定されてなかったら1つずつ出力
end
end
myprint "Hello", "world", {:concat => true} # => Hello world
myprint "Hello", "world" # => Hello
# => world
引数の最後がハッシュだったら取り出す。そうじゃなければ空のハッシュをダミーとして作る。
そうすれば、あとはお好きなようにって感じ。
#{ }の中はRuby式書けるんだよね
ダブルクォートで囲まれた文字列中の#{ }で囲まれた部分にはRubyの式が書ける。
よく使われる使い方としては、文字列中に変数の値を埋め込んだりとかかな。
10.times { |i| puts "こんにちは。あなたは#{i}番目の訪問者です" }
とても簡単じゃん。ふ~んって思ってたら、こういう使い方も出来るのか。。。と思ったコードがあった。
お試しコード
def fun value, greet
puts "#{"こんにちは#{value}さん" if greet}今日もいい天気ですね。"
end
fun "太郎", true # => こんにちは太郎さん今日もいい天気ですね。
fun "太郎", false # => 今日もいい天気ですね。
#{ }の中にif式とかも書けるんだよね。
出来るのは文法上当たり前だけど、その発想はなかったorz