gpt4 book ai didi

c++ - 表示行为与复制代码块的函数参数?

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:43 25 4
gpt4 key购买 nike

我最近阅读了 Clean Code,他们不鼓励的一个概念是将表示行为的变量传递给函数(即一个标志,如果为真,则做一件事,如果为假,则做另一件事)。书上说你应该写两个函数。

与此同时,复制代码块并不理想。

我编写了一个简单的明文暴力密码破解程序(用于学校项目),它会打印出每个密码。

我想要一种方法来关闭代码的打印部分,因此用户可以选择在打印或不打印的情况下运行它(以减少运行时间)。

我最初的解决方案是这样的:

bool bruteForce(bool printFlag)
{
for (all letter combinations)
if (printFlag)
fwrite(pw, sizeof(char), sizeof(pw) - 1, stdout);
...
}

但是,如果我这样做,它可能会运行得更慢。也许它不会有太大的不同,我想多了?

在这种情况下,最佳做法是什么?使用标志或制作具有打印功能的单独功能?

最佳答案

对于这样的主题有很多不同的看法。

我从书中的理解是,在这种情况下你应该避免使用带有 bool 参数的函数:

void module(bool enable) // Bad

// Good:
void enableModule();
void disableModule();

这主要是一个可读性问题。

你应该避免重复代码,在你的情况下,取决于你类的其余结构,也许你可以有一个类变量来启用/禁用标志打印作为一个单独的函数:

class x {
public:
bool bruteForce();
void enableFlagPrinting() { m_printFlag = true; }
void disableFlagPrinting() { m_printFlag = false; }

private:
m_printFlag = false;
}

根据您的其余代码,您可以将 bruteForce 本身作为一个类,并具有它可以拥有的所有参数。

class BruteForce {
public:
bool start();
void enableFlagPrinting() { m_printFlag = true; }
void disableFlagPrinting() { m_printFlag = false; }

private:
m_printFlag = false;
}

用作

BruteForce bf;
bf.enableFlagPrinting();
bf.start();

但是,如果我这样做,它可能会运行得更慢。也许它不会有太大的不同,我想多了?

鉴于它只是一个额外的 bool 比较,它执行得非常快,我怀疑它与其余代码相比会产生任何显着差异,尽管如果确实有必要,您可以复制代码,只要它是好的封装:

class BruteForce {
public:
bool start()
{
if (m_printFlag) bruteForceWithFlags();
else bruteForceWithoutFlags();
}
void enableFlagPrinting() { m_printFlag = true; }
void disableFlagPrinting() { m_printFlag = false; }

private:
void bruteForceWithFlags();
void bruteForceWithoutFlags();

m_printFlag = false;
}

这是速度/可维护性的权衡,根据经验,我建议您追求可维护性:P。

关于c++ - 表示行为与复制代码块的函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44838415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com