rubyの便利な文法おぼえがき
rubyの勉強をしていくうちに、好ましい記述法や技術が分かってきた。
String#[]
正規表現でマッチした文字を取り出したいだけ時にはmatchメソッドや =^メソッドではなくString型の[]メソッドが最も短く書ける
p "@@@@@hoge@@@@@"[/[a-z]+/] #=> "hoge"
%記法
パーセント記法はとても便利、場合によってはかなりみやすくなる。
p %s|symbol| #=> :symbol
p %w|abc def gh| #=> ["abc", "def", "gh"]
p %x|ruby -v| #=> "ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-linux]\n"
p %r|[A-Z]| #=> /[A-Z]/
#map
ある配列から他の配列を作りたいときなどに、以下のようにeachの前で結果を入れるため の配列を初期化しておくのは冗長
array=[1,2,3,4,5,6]
array2=[]
array.each{|i| array2 << i * 2}
p array2 #=> [2, 4, 6, 8, 10, 12]
以下のようにmapメソッドで関数型言語の流儀で書くべき。
array=[1,2,3,4,5,6]
array2 = array.map{|i| i * 2}
p array2 #=> [2, 4, 6, 8, 10, 12]
条件によって要素を外したい、条件に合う要素のみの配列を作りたい場合にはreject,selectメソッドがよい。
さらに、配列からハッシュを作りたいときなどには、以下のようにreduceメソッドがよい。
array=[1,2,3,4,5,6]
hash = array.reduce({}){|h,i| h[i]= i*2; h }
p hash #=> {1=>2, 2=>4, 3=>6, 4=>8, 5=>10, 6=>12}
case文
case文は===演算子で含有関係が評価されため、単純な一致の場合以外にも使える。
Integerの場合にはRangeがそれを含むかどうかを評価できる。
i = 10
case i
when 1..50
puts 'small'
when 51..10
puts 'big'
end
Stringの場合には正規表現が使える。
str = 'dojadf@ss'
case str
when /@/
puts "include @"
when /[a-z]+/
puts "only small letter"
end
begin~end による変数の代入
begin文は例外処理だけでなく、変数の代入に使用する事もできる。
def address
@address ||= begin
do_something
call_address_api @postal_code
end
end