【问题标题】:How to avoid a name collision between a boolean and a method which returns it如何避免布尔值和返回它的方法之间的名称冲突
【发布时间】:2017-09-28 13:41:21
【问题描述】:

假设我有一个处理动画的类。这个类的内部是一个名为isLooped 的布尔值和一个返回该布尔值的函数。我的问题是,我该怎么做才能避免调用函数和变量相同的东西?

我曾考虑为我的类变量添加前缀,但这意味着要对我的整个代码库进行更改,这是我不希望的。

【问题讨论】:

  • 函数和会员的访问控制是否相同?
  • 返回“isLooped”字段的函数的实际名称是什么?我不确定是否正确理解了这个问题,但基本上是“我能做些什么来避免调用函数和变量是同一件事?”的答案。只是:给他们两个不同的名字
  • 他们没有相同的访问控制。
  • 对成员函数和成员变量有不同的命名约定。
  • 然后将布尔值重命名为is_looped 之类的。没有解决办法,只能重命名两者之一。

标签: c++ naming name-collision


【解决方案1】:

这完全是命名约定的问题,这里有两个简单的选择:

选项 #1 例如,您可以将 UpperCamelCase 用于方法名称,将 LowerCamelCase 用于成员名称。

class Object {
    bool IsLooped() { return isLooped; }
    bool isLooped;
}

选项 #2 您可以将 LowerCamelCase 用于方法名称和成员名称,并为成员名称使用某种前缀/后缀,例如 m_,或者只是 _

class Object {
    bool isLooped() { return m_isLooped; }
    bool m_isLooped;
}

我更喜欢选项 #2,因为在尝试了解哪些对象是成员时,它让生活更轻松。

【讨论】:

    【解决方案2】:

    预先警告我不太了解 C++ 中的流行约定。

    我会保持isLooped 不变,并将您的方法重命名为getIsLooped()。我认为这使关系非常清楚。如果公开GetIsLooped()更合适。但显然,其余代码库中使用的约定会影响该决定。

    【讨论】:

    • GetIsLooped 很尴尬。要求调用函数 IsLooped() 并获得问题的答案似乎更自然。
    • 我最讨厌的约定之一:将get 放在一切之前。它甚至无法正确读取,您宁愿std::complex z{40, 2}; auto r = z.real(); 还是auto r = z.GetReal();。谈论变得真实。
    猜你喜欢
    • 2011-11-07
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多