2015年9月27日日曜日

プログラミング用フォント

Top 10 programing fontを見ていたら monofurというのがあった。
プログラミングに適した固定幅フォントだが、かなり独特で面白い。

rubyのテクニック覚書

rubyの勉強をしていくうちに、好ましい記述法や技術が分かってきた。

正規表現でマッチした文字を取り出したいだけ時には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]/

ある配列から他の配列を作りたいときなどに、以下のように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文は===演算子で含有関係が評価されため、単純な一致の場合以外にも使える。
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