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 件のコメント:
コメントを投稿