« [VS2010] Visual Studio 11 (vNext) の CTP が出てきた今、 VS2010 を買うには? | トップページ | [本] アジャイルサムライ ~ アジャイルマインドの伝道書 »

2011年11月10日 (木)

もうひとつの FizzBuzz ~ 数をして語らしむ ( #TDDBC 札幌2.2 より )

TDD の練習として定番の FizzBuzz 問題。

寺子屋未満: TDD Boot Camp 札幌 2.2に参加しました
2011/11/9 @irasally

そう、札幌名物、SmalltalkでのTDDBC参戦です。

数のリストをループさせてそれぞれを判定するロジックを考えていたのだけど、考え方が違った。

「それぞれの数が、自分が何者なのかを判定できるようにする」
「外からは”自分が何者なのかを判定するように”というメッセージを送る」

という考え方でした。

なるほど。 C# で、 さっそくやってみた。 こんなふうかな?
※ Visual C# 2010 Express + NUnit 2.6beta

[TestFixture()]
public class FizzBuzzExtensionTest {
    [TestCase(1, "1")]
    [TestCase(3, "Fizz")]
    [TestCase(5, "Buzz")]
    [TestCase(15, "Fizz Buzz")]
    public void SayFizzBuzzTest(int n, string expected) {
        string result = n.SayFizzBuzz();
        Assert.That(result, Is.EqualTo(expected));
    }
}

public static class FizzBuzzExtension {
    public static string SayFizzBuzz(this int me) {
        if (me.IsFizzBuzz())
            return "Fizz Buzz";
        if (me.IsFizz())
            return "Fizz";
        if (me.IsBuzz())
            return "Buzz";
        return me.ToString();
    }

    private static bool IsMultipleOf(this int me, int n) {
        return (me % n) == 0;
    }

    private static bool IsFizz(this int me) {
        return (me.IsMultipleOf(3) && !me.IsMultipleOf(5));
    }

    private static bool IsBuzz(this int me) {
        return (!me.IsMultipleOf(3) && me.IsMultipleOf(5));
    }

    private static bool IsFizzBuzz(this int me) {
        return (me.IsMultipleOf(3) && me.IsMultipleOf(5));
    }
}

|

« [VS2010] Visual Studio 11 (vNext) の CTP が出てきた今、 VS2010 を買うには? | トップページ | [本] アジャイルサムライ ~ アジャイルマインドの伝道書 »

プログラミング」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: もうひとつの FizzBuzz ~ 数をして語らしむ ( #TDDBC 札幌2.2 より ):

« [VS2010] Visual Studio 11 (vNext) の CTP が出てきた今、 VS2010 を買うには? | トップページ | [本] アジャイルサムライ ~ アジャイルマインドの伝道書 »