当前位置:  开发笔记 > 编程语言 > 正文

正交变量代码重复问题

如何解决《正交变量代码重复问题》经验,为你挑选了1个好方法。

我最近开始重构一些遗留代码并遇到两个用于绘制坐标网格的函数,问题是这些函数只在它们处理的正交变量上有所不同,就像那样

void DrawScaleX(HDC dc, int step, int x0, int x1, int y0, int y1)
{
    for(int x = x0; x < x1; x += step)
    {
         MoveToEx(dc, x, y0, NULL);
         LineTo(dc, x, y1);
    }
}
void DrawScaleY(HDC dc, int step, int x0, int x1, int y0, int y1)
{
    for(int y = y0; y < y1; y += step)
    {
         MoveToEx(dc, x0, y, NULL);
         LineTo(dc, x1, y);
    }
}

因此,如果我决定添加一些奇特的东西,比如抗锯齿,或者只是改变绘图铅笔或者我必须在两者中放置相同的代码并且它的代码重复而且它很糟糕我们都知道原因.

我的问题是你如何将这两个函数重写为一个函数以避免这个问题?



1> Matej..:

为什么你只是不将for循环的主体提取到一个单独的函数中?然后你可以在提取的函数中做有趣的事情.

void DrawScaleX(HDC dc, int step, int x0, int x1, int y0, int y1)
{
    for(int x = x0; x < x1; x += step)
    {
        DrawScale(dc, x, y0, x, y1);
    }
}

void DrawScaleY(HDC dc, int step, int x0, int x1, int y0, int y1)
{
    for(int y = y0; y < y1; y += step)
    {
        DrawScale(dc, x0, y, x1, y);
    }
}

private void DrawScale(HDC dc, int x0, int y0, int x1, int y1)
{
    //Add funny stuff here

    MoveToEx(dc, x0, y0, NULL);
    LineTo(dc, x1, y1);

    //Add funny stuff here
}

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有