Language agnostic 将getter和setter显式命名为“getter”和“setter”有什么好处;得到……”;及;设置…“;?
这会激怒其他人吗?我宁愿看到:Language agnostic 将getter和setter显式命名为“getter”和“setter”有什么好处;得到……”;及;设置…“;?,language-agnostic,programming-languages,accessor,Language Agnostic,Programming Languages,Accessor,这会激怒其他人吗?我宁愿看到: block.key(newKey); // set the key for this block 及 首先,“set”和“get”是冗余的(因此增加了噪声,降低了可读性)。操作(set/get)由每个语句的语法定义。我理解超载。事实上,使用同一个完全相同的标识符加强了这些都是对象的相同属性。当我读“getKey()”和“setKey()”时,我可能不太确定 其次,如果“get”和“set”被严格解释为setter和getter,那么如果与设置/获取值相关的
block.key(newKey); // set the key for this block
及
首先,“set”和“get”是冗余的(因此增加了噪声,降低了可读性)。操作(set/get)由每个语句的语法定义。我理解超载。事实上,使用同一个完全相同的标识符加强了这些都是对象的相同属性。当我读“getKey()”和“setKey()”时,我可能不太确定
其次,如果“get”和“set”被严格解释为setter和getter,那么如果与设置/获取值相关的其他语义(例如副作用)将令人惊讶
我想这种偏见来自于我的Smalltalk背景,但在一个多态性工作得很好的世界里,如果没有到处散布的“get”和“set”,我们不是会更好吗?想想看,如果我们不必反复输入这三个字母,我们还能输入多少代码?!(有点开玩笑)
有人有同样的感觉吗?对我来说,
get
和set
前缀使我的大脑在阅读代码时工作更少。一致使用时,get
/set
方法可以更容易地grep标题,可能会使类更容易学习和使用。我花在读代码和写代码上的时间不成比例,因此get
和set
的额外字符对我来说是可以接受的。C#的设计者显然同意这一点,“C#”标签在StackOverflow上以2:1的比例超过了下一个最流行的语言。所以我怀疑你是在向唱诗班布道。几种语言处理“能手”和“能手”的方式不同。在Java中有getName和setName,在Qt中有name和setName。出于以下原因,我更喜欢Java方式:
是的,java中的get/set本质上是一种解决语言中问题的方法 将其与c#properties进行比较 还是蟒蛇 我认为这是java最大的失败之一。C#getter和setter是“第一类”实体,在语法上与函数调用不相似(尽管任何任意代码都可以在访问器的上下文中运行) 我只在强迫我使用get/set的语言中使用,比如Objective-C。在accessor前面加上“get”,在mutator前面加上“set”,这是一种因语言而异的做法,在Java中似乎最为普遍。例如:
- 在Python中,您有属性的概念,因此访问器可能看起来像
,而变异器可能看起来像obj.foo
(即使在幕后调用了方法)。类似的概念存在于Ruby等语言中。因此,在许多语言中,对访问器和变异器的调用看起来像是对实例变量的直接“调用”,而你从来没有见过像“setFoo”或“getFoo”这样的东西obj.foo=bar
- 像Objective-C这样的语言不鼓励使用“get”作为访问器的前缀,因此在Objective-C中,您会看到像
和[obj foo]
这样的调用[obj setFoo:bar]
我也不喜欢在Java中用“get”作为访问器前缀的做法,但我确实看到了用“set”作为变量前缀的优点。也就是说,由于在爪哇中流行的是用“获取”/“SET”来前缀,所以我继续自己的代码中的趋势。C++中的< P> >只使用重载< /P>
int parameter() const { return m_param }
void parameter(int param) { m_param = param; }
一般来说,属性名应该是名词,而方法名应该是动词,因此上面示例中的属性将被称为“driver”,方法将被称为“drive”。当然会有重叠的情况,但一般来说,这会起作用并使代码更具可读性。您可以轻松地在代码库中搜索对
getDrive()
或setDrive()
的引用。如果您的方法名为“drive”,则在搜索时会出现更多的误报。Java语言目前没有属性,因此getter/setter语法已成为事实上的标准。如果您正在编写Java代码,那么就可以很好地使用Java约定。这不仅仅是为了让其他程序员可以阅读您的代码,更重要的是,数百个其他Java框架被构建来处理支持样式getter/setter的对象
例如,在中,您可以编写如下内容:
The answer is $block.key
以上内容将尝试调用:
block.getkey();
block.getKey();
如果您已经定义了block.getKey(),那么所有这些都可以正常工作。一般来说,最好遵循语言的惯例 听到,听到
我真的很喜欢getter和setter的特殊符号。CLU做得最好:
- 在表达式中使用
相当于调用p.x
get_x(p)
- 使用
(赋值)相当于调用p.x:=e
set_x(p,e)
p
的接口未导出get_x
或set_x
,则无法执行相应的操作。简单
让我们一起来听听吧 Python链接的URL很有趣,因为这篇博文实际上建议在Python中实现get/set方法,但通过
属性将它们屏蔽到成员名称中。你的观点2和3接近于支持Hunga
The answer is $block.key
block.getkey();
block.getKey();