まあ3行ならコピペするけどね。
とある業者からのメール 「下記日程のいずれかにて、ヒアリングいただけますでしょうか。 6月5日(火) 14:00以降 6月6日(火) 14:00以降 6月7日(火) 14:00以降」 皆様,これがコードクローンとその弊害です.
こんな呟きが流れてきたので、
この三行をコードで出力するとして、Objective-CでDRYに即したコードを書くことを考えるとブルーになる
NSArray* week; week = [NSArray arrayWithObjects:@"月", @"火", @"水", @"木", @"金", @"土", @"日", nil]; for (int i = 5; i <= 7; i++) { NSLog(@"6月%d日(%@) 14:00以降", i, [week objectAtIndex:(i+3)%7]); }
ついでにRuby
(5..7).each {|i| puts "6月%d日 (%s) 14:00以降" % [i, %w!月 火 水 木 金 土 日![(i+3)%7]]}
Objective-Cは配列周りの記述が冗長になるのは仕方ない。Objective-Cでも一行で書けるけど、Objective-Cは丁寧に、Rubyはなるたけ簡潔に書くほうが読みやすい気がします。
これは文字列を単純に出力するだけのコードだけど、実際にブルーになるのは日付計算です。
Cocoaの日付計算は覚えることも少なく直感的に書けて、かつ柔軟で優秀だと思うんだけど、どうしても行数はかさむ。
Rubyはどんな感じなのかな。今日は眠いので次にでも書き比べてみます。