FizzBuzz思考過程のコメント:
失礼なこと書いて申し訳ないですが、個人的にはマズイと思います。
普通にメンテナンスが入る業務系のプログラムにはそういうトリッキーなロジック含めるべきじゃないという意味です。
ごもっとも。
ならばおもきし一般化してみる。
要は"ある条件"を満たしたとき"ある動作を行う"の連続ですわね。
ならば"ある条件"と"ある動作を行う"の組をいくつか持っといて...
using System;
using System.Collections.Generic;
delegate bool Predicate(int n); // この条件が満たされたら
delegate void Action(int n); // こぉします。
class Program {
public static void Main() {
KeyValuePair<Predicate,Action>[] table = {
new KeyValuePair<Predicate,Action>(
delegate(int x) { return x%3!=0 && x%5!=0; },
delegate(int x) { Console.WriteLine(x); }),
new KeyValuePair<Predicate,Action>(
delegate(int x) { return x%3==0 && x%5!=0; },
delegate(int x) { Console.WriteLine("Fizz"); }),
new KeyValuePair<Predicate,Action>(
delegate(int x) { return x%3!=0 && x%5==0; },
delegate(int x) { Console.WriteLine("Buzz"); }),
new KeyValuePair<Predicate,Action>(
delegate(int x) { return x%3==0 && x%5==0; },
delegate(int x) { Console.WriteLine("FizzBuzz"); }),
};
for ( int i = 1; i <= 100; ++i ) {
foreach ( KeyValuePair<Predicate,Action> kv in table )
if ( kv.Key(i) ) kv.Value(i);
}
}
}
メンテしやすいったらありゃしないテカー ^^;