在标识符中使用“ ys”代替“ ies”以简化查找和替换功能是否有意义?[关闭]


9

尽管在语法上不正确,但是在编写函数,变量等的标识符时,是否将“ s”简单地附加到以Y结尾的复数单词是否有意义?我这样做的原因是,如果您需要查找和替换,例如,用“供应商”替换“公司”,则“公司”将匹配单数和复数形式(“ company”和“ company s”),而如果复数的拼写正确,则必须进行两次单独的搜索。


8
那孩子,老鼠,刀,狼,男人,女人,妻子和牙齿呢?为了避免可怕的“两个分开的搜索”,一切都是有效的。
图兰斯·科尔多瓦

3
我偏爱狼人而不是狼人……
吉米·霍法

2
您是否真的打算在工作流程中经常重命名标识符?承担代码中所有拼写错误的名称的认知问题只是为了支持可能永远不会使用的功能,似乎有点过头了。
肯特A.15年

10
相信我,您不想在没有“仅全字”约束的情况下,在大型代码库上对“公司”之类的字词执行查找替换操作。因此,您将不得不使用两个单独的搜索。
布朗

2
二。分离。搜索。
图兰斯·科尔多瓦

Answers:


24

任何此类搜索和替换都应格外小心,并且应手动检查每个更改,例如,避免注释中的“陪伴”成为贵公司/供应商更改的“陪伴”。因此,与检查和批准每个变更所花费的时间相比,对“公司”和“公司”的两次单独搜索不应产生可观的开销。

因此,拼写错误的单词仅能实现一次搜索就带来了负面的外观,使它看起来比原来需要的更难阅读,而没有提供任何明显的好处。


11
并且,随着重构工具的改进,仅基于文本进行全局搜索和替换已成为重命名标识符的最不可靠的方法。
肯特A.15年

如Doc Brown所述,使用“仅全词”搜索不会有问题。
SHNC

6
@ user3047082,整个单词搜索也不会与“公司”匹配,这使整个问题变得毫无意义……
David Arno

6

我假设您正在谈论重命名源代码文件。对于当今的IDE,应该始终使用IDE的重构工具来完成此操作。如果您的IDE没有此功能,请考虑切换到另一个IDE。大多数IDE重构工具还保留重构的历史记录,如果您不喜欢重构的结果,则可以快速“撤消”。使用搜索/替换,您可能无法撤消整个更改集(除非您可以使用版本控制工具并恢复为先前提交的版本)。而且,使用重构工具可以避免因疏忽而更改您不打算更改的内容。


3
对于任何人将此答案标记为低质量的人:尽管它没有严格回答所提出的问题,但它解决了人们为什么要使用这样的命名方案以及完成同一任务的更好方法的更大局面。我投票给该标志评论“看起来不错”,并添加了赞成票。

谢谢,@ Snowman。在未知区域中,根据您自己(没有经验)的心态来提出问题是人类的天性。是的,虽然我没有回答实际问题,但我对真正要问的内容的假设是基于问题的其他线索。我最常遇到的复数来自代码生成工具,例如XSD-to-POJO,数据库的Hibernate / JPA逆向工程等。本质上,如果这些复数在代码中并且作者不喜欢选择复数形式,那么它们很可能不是作者编写的,而是更有可能自动生成的。
javabeano

-9

是! 是! 是! 这样做是很有意义的。我已经做了很多年了。

披露1:英语不是我的母语。

披露2:我的英语语法知识要比普通母语人士好得多。

披露3:在与人交流时,我是纳粹分子。

现在,这些公开内容已不复存在,让我指出,英语语法在代码中没有地位。您会看到,这就是为什么它被称为代码而非prose的原因。出于可读性的考虑,它应该与人类所理解的语言有些相似,但是除此之外,我们最需要的代码不是散文的质量。这是其他更多的技术特质,例如精确度明确性简洁性。这就是为什么C语法if( x != y ) y++;很多最好的IF X IS NOT EQUAL TO Y THEN ADD 1 TO Y END-IF.Cobol语言的语法。所谓的理解自然语言的编译器的合意性是一个谬误,不要相信我,请看ol'Edsger对此有何评论:Edsger W. Dijkstra,论“自然语言编程”的愚蠢

另一个重要的质量是标识符的可计算性Color始终可以通过调用的方法读取并通过调用的方法getColor()写入属性的事实setColor()至关重要。这些标识符可以从属性名称中计算得出,因此您不必内心知道它们。如果程序员要选择getColor()一方面调用的一对方法,但colorize()另一方面,他们的同事将正确地考虑这种破坏行为。这就是标识符可计算性的重要性。

此外,可以编写可以计算这些名称的编程工具(实际上已经编写了很多工具,例如Hibernate)。如果没有标识符名称的可计算性,则您将不得不使用其他语法(例如,在Hibernate中使用额外的注释)来为每个工具精确指定如何创建每个标识符名称,或者精确地为每个实体指定哪个临时名称。

因此,标识符的可计算性很重要,而与此同时英语语法则是无关紧要的(因为我们没有进行自然语言编程),因此能够通过始终在名称的后面附加“ s”来计算实体集合的名称一个实例的实例是完全有道理的,不要介意它侵犯了大多数人(包括我的)对英语的敏感性。

不管我们是否喜欢,这都是未来的趋势。地球上大多数程序员的母语已经不再是英语,并且朝着这个方向发展的趋势非常强烈。(此外,我什至不愿在这样的建议上花钱:英语是目前在美国工作的大多数程序员的母语。)这些人在很大程度上试图计算姓名从“ company”的单个实例的名称中获取一个集合,只需添加“ s”,而“ companies”的形式甚至都不会引起他们的注意。对于世界上越来越大的程序员比例而言,了解英语的特殊性不会给他们的工作带来任何价值,只会使工作变得更加困难。


7
1.索引和索引都是索引的有效复数。您误以为只有一个是正确的,例如,请参阅oxforddictionaries.com/definition/english/index。2.可以通过getX读取并通过setX写入的私有X不是私有的;这是一种公共价值。3.代码是设计文件。它告知编译器如何生成“机器代码”,但是更重要的是,它以其他人可以轻松阅读的方式描述了该设计。可读性是编码的两个最重要方面之一(可测试性是另一个)。
David Arno

3
编写代码的原因有两个:供人类阅读和供计算机执行。有人会说源代码主要是供人类阅读的,因为大多数代码在计算机执行之前会立即编译成字节代码。因此,尽管计算机可能并不在乎正确的语法,但是人类肯定会在乎。
埃里克·金

3
尽管英语可能不是您的母语,但可能是下一个阅读您代码的人。这也可能会使您的母语学习英语的其他人感到困惑。
安迪

2
或者你只会伤害那些恍然大悟的Companys时候它应该是Companies。毕竟,我们通常编写的代码的全部要点实际上是使其更接近自然语言。
安迪

2
不管怎样,我发现那张纸堆满了屎。代码介于自然语言和字节码之间。如果不是为了简化人类对代码的理解,那么就没有任何理由不只是直接输入字节码。
安迪
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.