2013-11-04 19 views
0

我希望对程序设计方法有以下帮助/指导。程序设计方法

我正在开发一个类,其中我有这个类,属性算出来了,如下所示;

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 /字符串的而不是3/5布尔值吗?在我 应用程序代码中,我只是比较TCHAR /字符串与特定 TCHAR /字符串,说如果该位置是TOP,做任务A,或者不具有 有我缺少任何优势布尔?

另外,我有周围8个属性为此我需要布尔以 确定它是否在顶部,中部或底部

任何帮助/指导将不胜感激。

+0

您是否使用'TCHAR',因为它们是显示字符串,并且您需要使用相同的来源在多字节和宽字符之间切换,还是其他内容? –

+1

为什么不是枚举? – user93353

+0

@RetiredNinja你是正确的那些是显示字符串。 – JNL

回答

0

bool是一个字节类型,而TCHAR取决于它的用途可以达到两个字节。从内存大小和优化的角度来看,bools更优化,速度更快,因为它们要么是0,要么是1.您应该提到您的目标是要发生这种变化。涉及很多方面。

+0

'sizeof(bool)'是实现定义的。它可以是1个字节或更多,具体取决于您的编译器和体系结构。 – Fabien

+0

@Fabien你是对的,我假设Visual C++作为编译器和PC作为我的机器。 – MahanGM

0

“更好”是主观的,正确的方法取决于你的意思。

当编写新的代码,我总是在这些方面界定“更好”,按以下顺序:

  1. 简单。清晰易懂的代码比复杂的模糊代码更好,因为它更容易扩展和修复。
  2. 通用性。通用代码比具有非常窄适用范围的代码更好,因为它减少了必须编写的代码量。希望这反过来可以减少您必须修复的错误数量。
  3. 速度效率。快速代码比慢速代码更好。
  4. 效率空间。较少的内存使用比更好。

由于这种应用到你的代码,我可能会设计,它使用一个bool为每个不同的属性,而不是试图与OR ED标志等创建一个单一的整体式如果布尔值是互相排斥的,那么我会用一个enum来表达它们。

避免过早地微代码优化非常重要,因为这样做会使事情变得更加复杂,不那么通用并且难以维护。但是,没有理由不选择正确的算法。由于代码是针对真实的生产环境编写和测试的,因此我将分析我的代码并确定热点。如果我发现任何和识别它们来进行固定的东西,需要的话我的工作重点转移:

  1. 效率的速度。快速代码比慢速代码更好。
  2. 效率空间。较少的内存使用比更好。
  3. 简单。清晰易懂的代码比复杂的模糊代码更好,因为它更容易扩展和修复。
  4. 通用性。通用代码比具有非常窄适用范围的代码更好,因为它减少了必须编写的代码量。希望这反过来可以减少您必须修复的错误数量。

简单仍然比较重要,特别是当开始微观优化。优化代码很容易导致复杂性失控,使维护成为一场噩梦。不要完全放弃表演的神坛上的简单。

0

虽然不是唯一的要点在设计考虑,它通常是一个很好的格言

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#。

在设计上越来越好的好运,这是一次一小步,有很多事情要考虑。

+0

我喜欢'当做某事时,做一次',这就是为什么我想到字符串比较的原因。绝对枚举服务于这里最好的目的。感谢你的帮助埃德温。 – JNL