railsはwebアプリを短時間で簡単に作成出来るので、使い方はある程度知っていたのですが、rubyに関してはそんなに関心はなく。あまり理解はしていませんでした。
以前にrubyメタプログラミングの本を読んだときもこんな使い方もあるが、殆ど使わないかなとの感想でした。最近rubyの言語本を読み返すと、rubyってメタプログラミングを使わなくても凄いと感じました。コード量が少ない。(行き過ぎるとわかりにくいコードにはなりますが。。)
ruby言語の感動はつたわらないと思いますが、いくつかサンプルをあげておきます。
イテレータを使ったsql文に条件追加(このイテレータの使い方はいまいち?やはりイテレータ側ではもっと複雑な処理をするものが適しているか?ruby関数のFile.openとかはいい見本かもしれません)
以前にrubyメタプログラミングの本を読んだときもこんな使い方もあるが、殆ど使わないかなとの感想でした。最近rubyの言語本を読み返すと、rubyってメタプログラミングを使わなくても凄いと感じました。コード量が少ない。(行き過ぎるとわかりにくいコードにはなりますが。。)
ruby言語の感動はつたわらないと思いますが、いくつかサンプルをあげておきます。
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 件のコメント:
コメントを投稿