我非常感谢您对以下项目的程序设计方法提供任何帮助/指导。
我正在开发一个类,在这个类中我有这个类,属性已经计算出来,如下所示;
class PanelBlock{
public:
PanelBlock();
private:
TCHAR m_sSlope[PANEL_NAME_LENGTH]; // To store the Slope
bool m_bTopPanel; // This is to identify the
bool m_bMidPanel; // location of the PanelBlock.
bool m_bBotPanel;
// Similarly we have it for other attributes.
// My Question here is,
// Is it better to have a TCHAR instead of 3/5 booleans here?
TCHAR m_sPanelLocation[PANEL_LOCATION_LENGTH];
}
我的问题是,
这里使用TCHAR/String而不是3/5布尔值更好吗?在我的应用程序代码,我只需要将TCHAR/String与特定的TCHAR/String,比如如果位置为TOP,则执行任务A,或者执行布尔值有什么我缺少的优势吗?
此外,我有大约8个属性,为此我需要布尔值识别它是在顶部、中间还是底部。
如有任何帮助/指导,我们将不胜感激。
"Better"是主观的,正确的方法取决于你的意思
在编写新代码时,我总是用以下术语定义"更好",顺序如下:
- 简洁清晰、易于理解的代码比复杂、模糊的代码更好,因为它更容易扩展和修复
- 共性通用代码比适用范围很窄的代码要好,因为它减少了您必须编写的代码量。希望这反过来能减少你必须修复的错误数量
- 速度效率快代码比慢代码好
- 空间效率少用内存总比多用内存好
由于这适用于您的代码,我可能会将其设计为对每个不同的属性使用单个bool
,而不是尝试创建具有OR
-ed标志等的单个积分类型。如果布尔值互斥,那么我将使用单个enum
来表示它们。
重要的是要避免过早地对代码进行微优化,因为这样做必然会使事情变得更复杂、更不通用、更难维护。然而,这并不是一开始就不选择正确算法的借口。
当代码在真实的生产环境中编写和测试时,我将对代码进行评测并确定热点。如果我发现了任何问题,并将其确定为需要修复的问题,那么我的优先事项就会发生变化:
- 速度效率快代码比慢代码好
- 空间效率少用内存总比多用内存好
- 简洁清晰、易于理解的代码比复杂、模糊的代码更好,因为它更容易扩展和修复
- 共性通用代码比适用范围很窄的代码要好,因为它减少了您必须编写的代码量。希望这反过来能减少你必须修复的错误数量
简单性仍然相对重要,尤其是在开始进行微观优化时。优化代码片段很容易导致复杂性失控,使维护成为一场噩梦。不要在表演的祭坛上完全抛弃简单。
bool
是一个单字节类型,而TCHAR
根据其使用情况最多可以是两个字节。从内存大小和优化的角度来看,bool
s更优化、更快,因为它们要么是0,要么是1。你应该提到你的目标,让这种改变发生。这涉及到很多方面。
虽然这不是设计中需要考虑的唯一要点,但它通常是一条很好的准则
When doing something, do it once.
您有三个布尔值,用于控制项目的位置。这意味着要想弄清楚项目的位置,你需要检查三个项目。此外,要设置项目的位置,需要设置一个布尔true
和两个布尔false
。似乎你几乎每次做某事都会做三件事。
考虑这个
public enum VerticalPanelPosition {
TOP,
MIDDLE,
BOTTOM;
}
现在你只能有一个位置
private VerticalPanelPosition vPosition;
并且只需要做"一件事,一次">
public void setPosition(VerticalPanelPosition position) {
vposition = position;
}
很抱歉使用Java语法,但考虑到上下文,我敢打赌你可以毫不费力地将其翻译成C#。
祝你在设计方面做得更好,这是一小步一小步,有很多事情需要考虑。