oop - 我应该什么时候开始一个方法名称,它获取带有 "get-"前缀的属性?

标签 oop naming-conventions accessor

对于返回对象的属性/属性/成员的方法的命名有什么好的经验法则?如果一个对象具有一些不可变的质量“blarg”,那么返回该质量的方法应该称为“blarg()”还是“getBlarg()”?例如,Java API 是不一致的:大多数属性都是通过“get”方法访问的(即使是那些没有相应的“set”方法的),但我们也有类似 Object.hashCode() 而不是 Object。获取哈希码()。

更新:属性是否是字段(在实现中)是否应该在这里确定?那么在二维空间中表示不可变点的类呢?无论该点是存储为 (x,y) 还是 (r,theta),我仍然需要所有四个属性的访问器。它们应该是 getX()、getY() 等,还是只是 x()、y() 等?从用户的角度来看,由于我们不希望用户知道/关心我们的实现,这四个不应该都具有相同的命名约定吗?

最佳答案

取决于语言。

在 Smalltalk 中,对于 getter 的约定是 blarg,对于 setter 是 blarg:。

在 Java 中,JavaBeans约定是 getBlarg() 和 setBlarg()。加上 bool 属性的 isBlarg()。

您提到了没有 getter 和 setter 的情况。这是有道理的,因为有些属性是只读的。

当您遵循约定时,您会获得其他人更容易阅读的代码。有时工具支持。例如,许多工具都可以识别 JavaBeans 约定。

JavaBeans 约定直到 Java 1.1 才出现。所有 Object 方法(例如 hashCode())都早于此。并且无法更改以实现向后兼容性。

关于oop - 我应该什么时候开始一个方法名称,它获取带有 "get-"前缀的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/296719/

相关文章:

c++ - 返回 const 引用的纯虚方法

python - 如何使用 duck typing 编写 OOP 一致的代码?

java - 遍历节点类被另一个类继承的树

css - 在 CSS ID 命名约定中可以混合使用下划线和破折号(连字符)吗?

c# - 空访问器很重要吗?关于值类型及其修改

c# - 在 C# 堆栈溢出中使用访问器

javascript - JS : OOP private functions/private fields

c++ - 我应该为 size_t 包含 stddef.h 还是 cstddef

Java 标识符中的变量类型

python - 是否有一个 pandas 访问器来存储每个单元格中对象的底层值?