<< 前 ホーム 次 >>

bakaid: 200909242

リファクタリングには終わりがないほうがフツウだ。

いや、いつまでもリファクタリングし続けることを納期が
許さないといったほうが正しい。

たとえば:

static int
see_more(void)
{
    int c;

    printf("\033[7m more? \033[m");  /* reverse on a vt100 */
    while ((c = getchar()) != EOF) {
        if (c == 'q')
            return 0;
        if (c == ' ')
            return PAGELEN;
        if (c == '\n')
            return 1;
    }
    return 0;
}

という関数。最初のprintfはプロンプトを出すための
ものだ。ならば、その意図を関数にする:

static void
show_prompt(void)
{
    printf("\033[7m more? \033[m");  /* reverse on a vt100 */
}

さて、printfに渡す引数のやっていることは何か?
端末上に文字を反転表示させることだ。ならば、その
意図を関数にする:

/**
 * reverse on a vt100
 */
static void
print_reverse(const char *text)
{
    printf("\033[7m %s \033[m", text);
}

static void
show_prompt(void)
{
    print_reverse("more?");
}

さらに、print_reverseのコメントも関数にする
ことで消す:

static void
reverse_on_vt100(const char *text)
{
    printf("\033[7m %s \033[m", text);
}

static void
print_reverse(const char *text)
{
    reverse_on_vt100(text);
}

さらに、これがC++だとして:

class ReversePrint {
public:
    virtual void print_reverse(const char *text) = 0;
};

class ReversePrintVT100 : public ReversePrint {
public:
    virtual void print_reverse(const char *text) {
        printf("\033[7m %s \033[m", text);
    }
};

といったことも考えられる。

--

まぁ、実際問題、ここまでやるかといったら、なかなか
やるヒマはない。でも、ここまでやれば、コメントは
思ってるほど必要ではないということがわかってもらえる
だろう。

リファクタリングをいつ止めればいいかはむずかしい
問題だ。だが、一方で、簡単な問題でもある。冒頭で
書いたように、納期というものがあるからだ。

agileならば、ストーリーを引き受けたときに見積もりを
出すはずだ。それがまず第一の納期ということになる。
それでも続けたければ、みんなから同意を得ないと
いけない。そのプレッシャーに勝てるなら続ければいい。

本家Permlink

<< 前 ホーム 次 >>


Copyright © 1905 tko at jitu.org

バカが征く on Rails