ポール・グレアム「バージョン1.0
これ、めちゃくちゃおもしろかった。
「偉大な」執事とは何か?
と、小説の中の主人公が自問自答する場面を思い出した。なんでだろな...。あんまり関係ないと思うんだけど。
2009/12/29
よみもの
2009/12/28
unless a.nil?
このあいだ
github.com/midore/mdiary
mdiary-main.rb
378 return nil unless @st.nil? || @plus.nil?
だったのを
379 return nil if @st && @plus
に変えた。
前者と後者は同じ動きをする。どちらも
@st は nil ではなく、かつ、@plus もnil でなければ、return nil をかえす。
例えば
1 # coding: utf-8
2
3 a = 'a'
4 b = 'b'
5 print "a,b どちらも not nil です。\n" unless a.nil? || b.nil?
6 print "a,b どちらも not nil でっす。\n" if a && b
実行すると
a,b どちらも not nil です。
a,b どちらも not nil でっす
となる。
前者(||を使用),後者(&&を使用)ともに
a は nilではない。かつ、b も nil ではない。
であれば print する。
と動く。ちょっと不思議だけど。
条件文が読みやすいのは && を使用した後者。
ただ、
if x
と書いて nil じゃなければとするより
unless x.nil?
と、nil なの?そうじゃないなら と書いてあった方が私にとってはわかりやすい時もあったりする。
...とはいっても || なのに「かつ」 を意図してるとなってると後になって自分がぎょっと驚いてしまうだろうから...変えた。
url for blogger-api
Blogger API 用
日付範囲を指定したURLの生成
line 10:
t に2010/12 が指定された場合、翌月は年も変わるので年に1加算し月にも1加算すると2011/1/1 が得られそこから1秒ひくと2010/12/31の23:59:59
になる。
Time だけ使った場合
1 require 'time'
2
3 def range_current_month(t=nil, bid)
4 u = "http://www.blogger.com/feeds/#{bid}/posts/default"
5 begin
6 t = Time.parse(t) unless t.nil?
7 rescue
8 t = Time.now()
9 end
10 t.month == 12 ? x = [t.year+1, 1] : x = [t.year, t.month+1]
11 min = t.strftime("%Y-%m-%dT00:00:00")
12 max = (Time.local(x[0], x[1], 1) -1).strftime("%Y-%m-%dT%H:%M:%S")
13 return u + "?published-min=#{min}" + "&published-max=#{max}"
14 end
15
16 bloggerid = 'xxxxxxxxxxxx'
17 t = '2010/12'
18 p range_current_month(t, bloggerid)
19 t = '2010/2'
20 p range_current_month(t, bloggerid)
=>
"http://www.blogger.com/feeds/xxxxxxxxxxxx/posts/default?published-min=2010-12-01T00:00:00&published-max=2010-12-31T23:59:59"
"http://www.blogger.com/feeds/xxxxxxxxxxxx/posts/default?published-min=2010-02-01T00:00:00&published-max=2010-02-28T23:59:59"
Date も使った場合
1 require 'time'
2 require 'date'
3
4 def range_current_month(t=nil, bid)
5 u = "http://www.blogger.com/feeds/#{bid}/posts/default"
6 begin
7 t = Time.parse(t) unless t.nil?
8 rescue
9 t = Time.now()
10 end
11 t.month == 12 ? x = [t.year+1, 1] : x = [t.year, t.month+1]
12 min = t.strftime("%Y-%m-%dT%H:%M:%S")
13 max = ((Date.new(x[0], x[1], 1)) - 1).strftime("%Y-%m-%dT23:59:59")
14 return u + "?published-min=#{min}" + "&published-max=#{max}"
15 end
16
17 bloggerid = 'xxxxxxxxxxxx'
18 t = '2010/12'
19 p range_current_month(t, bloggerid)
20 t = '2010/2'
21 p range_current_month(t, bloggerid)
22
=>
"http://www.blogger.com/feeds/xxxxxxxxxxxx/posts/default?published-min=2010-12-01T00:00:00&published-max=2010-12-31T23:59:59"
"http://www.blogger.com/feeds/xxxxxxxxxxxx/posts/default?published-min=2010-02-01T00:00:00&published-max=2010-02-28T23:59:59"
もう少し短くできないかなと思うんだけど...。 ?
登録:
投稿 (Atom)