这会激怒其他人吗?我宁愿看到:

 block.key(newKey);  // set the key for this block




 testKey = block.key();  // look up the key for this block




 block.setKey(newKey); // set the key for this block
 testKey = block.getKey(); // look up the key for this block


首先,“设置”和“获取”是多余的(因此会增加噪音,从而降低可读性)。操作(设置/获取)由每个语句的语法定义。我了解超载。实际上,使用相同的确切标识符会增强这些标识符与对象的相同属性。当我阅读“ getKey()”和“ setKey()”时,我可能不太确定。

其次,如果严格将“ get”和“ set”解释为setter和getter,那么如果与设置/获取值相关的其他语义(例如副作用)将会令人惊讶。

我想这种偏见来自我的Smalltalk背景,但是在一个多态性工作得很好的世界中,如果没有到处撒“ get”和“ set”的情况,我们会更好吗?试想一下,如果我们不必一遍又一遍地输入这三个字母,我们还能输入多少代码? (有点舌头)

外面有人有同样的感觉吗?

最佳答案

在访问器前面加上“ get”前缀,在mutator上加上“ set”前缀,这种做法因语言而异,并且在Java中似乎很普遍。例如:


在Python中,您具有属性的概念,因此访问器可能看起来像obj.foo,而变量器可能看起来像obj.foo = bar(即使方法在后台被调用)。 Ruby等语言中也存在类似的概念。因此,在许多语言中,对访问器和修改器的调用看起来像直接对实例变量的“调用”,而您再也看不到“ setFoo”或“ getFoo”之类的东西。
诸如Objective-C之类的语言不鼓励使用“ get”为访问者添加前缀,因此在Objective-C中您会看到诸如[obj foo][obj setFoo:bar]之类的调用。


我也从不喜欢在Java中使用“ get”为访问者添加前缀的做法,但是我确实看到了在以“ set”为前缀的变异符中的优点。就是说,由于流行的做法是在Java中以“ get” /“ set”作为前缀,因此我将继续沿自己的代码发展。

09-10 07:28
查看更多