2012年8月26日日曜日

ruby プログラミング

railsはwebアプリを短時間で簡単に作成出来るので、使い方はある程度知っていたのですが、rubyに関してはそんなに関心はなく。あまり理解はしていませんでした。
以前にrubyメタプログラミングの本を読んだときもこんな使い方もあるが、殆ど使わないかなとの感想でした。最近rubyの言語本を読み返すと、rubyってメタプログラミングを使わなくても凄いと感じました。コード量が少ない。(行き過ぎるとわかりにくいコードにはなりますが。。)


ruby言語の感動はつたわらないと思いますが、いくつかサンプルをあげておきます。


イテレータを使ったsql文に条件追加(このイテレータの使い方はいまいち?やはりイテレータ側ではもっと複雑な処理をするものが適しているか?ruby関数のFile.openとかはいい見本かもしれません)
def sql
      "select name,phone,address,age from persons #{yield :where} #{yield :group} #{yield :order}; "
end
only_mphone = true
age =10
strSQL = sql{|type|
    case type
      when :where
        "where age > #{age} #{"and substr(phone,1,3) = '090'" if only_mphone}"
      when :order
        "order by name"
    end
}
puts strSQL

#結果 "select name,phone,address,age from persons where age > 10 and substr(phone,1,3) = '090'  order by name;"
以前に発見した代入方法です。これはわかりやすい。
only_mphone = true
age =10
only_mphone = true
sqlcondition ={:where => "where age > #{age} 
        #{"and substr(phone,1,3) = '090'" if only_mphone}",
              :order => "order by name"}
strSQL = "select name,phone,address,age from persons #{sqlcondition[:where]}  #{sqlcondition[:order]};"
puts strSQL

#結果 "select name,phone,address,age from persons where age > 10 and substr(phone,1,3) = '090'  order by name;"
splitで配列に分解して、joinで接続
puts "2012/8/26".split('/').join('-')

#結果 "2012-8-26"
mapで配列の中身を変更しています。これもいい。
puts "2012/8/26".split('/').map{|x| 
   if x.size == 1 then 
     "0" + 
   x else x end}.join('-')

#結果 "2012-08-26"

0 件のコメント:

コメントを投稿