Language agnostic 您是否使用特定的约定来命名互补变量?

Language agnostic 您是否使用特定的约定来命名互补变量?,language-agnostic,naming-conventions,variable-names,Language Agnostic,Naming Conventions,Variable Names,我经常发现自己试图为互补的变量对取个好名字;其中两个变量表示对立的概念,两个参与者以某种形式进行对话,等等 这可以用一个反例来更好地解释——我维护了一个应用程序,它可以打印两个图形作为印刷广告的一部分。它们以TopLogo和LowerLogo的形式存储在数据库中,每次使用它们时我都必须停止并仔细检查,因为我希望top能够补充bottom,而lower应该补充upper 我认为有一些明显的例子效果很好: 客户端/服务器 源/目标用于将数据或文件从一个变量复制/移动到另一个变量 最小值/最大值 但有

我经常发现自己试图为互补的变量对取个好名字;其中两个变量表示对立的概念,两个参与者以某种形式进行对话,等等

这可以用一个反例来更好地解释——我维护了一个应用程序,它可以打印两个图形作为印刷广告的一部分。它们以
TopLogo
LowerLogo
的形式存储在数据库中,每次使用它们时我都必须停止并仔细检查,因为我希望
top
能够补充
bottom
,而
lower
应该补充
upper

我认为有一些明显的例子效果很好:

客户端/服务器

源/目标
用于将数据或文件从一个变量复制/移动到另一个变量
最小值/最大值

但有些概念并不适合这种简洁的命名方案。例如,在对记录进行分页时,“last”是指“final”还是“previous”?我最近看到一些代码使用了
firstPage
previousPage
nextPage
finalPage
,完全避免了模棱两可的
lastPage
,我认为这是非常糟糕的,因此提出了这个问题


您是否有任何特别整洁的变量名对愿意与我们分享?(如果它们的长度相同,则会得到额外的分数,这使得代码在单间距字体中更加整洁。)

是的,我会尝试系统地命名互补变量集,以便对称性清晰。这并不总是容易的;有时候,甚至不可能。嗯,用我为自己制定的规则是不可能的——这意味着我通常会尝试让名字的长度相同。“上”和“下”的例子会让我发疯(假设我还没有发疯,这还远远不能确定);我可能会使用“upper”和“lower”,因为它们的长度相同“顶部”和“底部”也会让我感到沮丧,因为长度不同。

虽然人们在明显的情况下会尝试语义上的连贯性——例如,最大值与最小值一致,而不是“最低值”——但在结构良好的OO代码中(我知道这不全是代码),问题会随着一个好的IDE而消失类短,方法短,每个方法中的变量少。因此,只要变量对是清晰的,那么它被称为什么并不重要。您的代码可能看起来不专业,但真正的质量在于代码,而不是代码的外观。

如果有好的JavaDoc或任何文档系统,并且有好的类名,那么问题就会进一步消失。例如,如果您有一个
连接
类的实例,它有一个名为
setDestination
的方法,这没关系,但是如果您知道setDestination接受一个名为
destination
的参数,并且它是
服务器
类的,那么您就很酷了。。。即使您可能更喜欢将其命名为
目标
目标
放置到发送数据
,或
任何
(以及相应的名称,
从这里来
,以及
放置到从
来设置数据)。另外,文档系统会告诉你这个东西的用途,这是无价的

接下来的事情可能听起来很愚蠢,我相信我会在StackOverflow上被否决,但独特的、听起来不专业的变量名有一个很大的优势:我知道我的变量的名称像
placeWeWantTheDataToGo
(IDE负责键入),但是“严重的”那些使用JDK的人永远不会使用这样愚蠢的名字。所以我马上知道这个变量是我的。顺便说一句,当我与西班牙和意大利的开发人员合作时,他们用西班牙语变量名编写代码(不总是,但通常是)。这会产生同样的效果:我们可以很快看到
Conexion
类是我们的,但是
连接
类不是


[此外,不要键入变量名,而是在代码中的某个位置为它们指定一个常量字符串,并使用该字符串,因此,如果它们将其称为lower或downer而不是low,则您仍然可以。]

与所有类型的代码样式约定一样,一致性是您应该努力追求的。

我会让开发团队就“源/目的地”或“从/到”等常见场景的“标准”前缀对达成一致,然后在整个项目中使用它们。只要每个开发人员都知道代码库中特定前缀的含义,就更容易避免误解。


如果变量是公共API的一部分,则应在文档中说明该规则的例外情况;如果变量的可见性仅限于单个类或方法,则应在代码中的注释中说明例外情况。

在我的数据库中,您会发现许多有效的状态时间(“历史”)包含一对名为
start\u date
end\u date
的列的表。因此,我没有额外的分数,因为我宁愿使用常用的“结束”,也不愿尝试用与“开始”相同的字符数来想出一个直观的替代方法


我倾向于使用这些通用术语,即使更具体的上下文术语可能是可行的,例如更喜欢
employee\u start\u date
而不是
employee\u hire\u date
(如果他们的雇佣开始的原因不是正式雇佣,例如他们的公司是被收购的对象)。也就是说,我更喜欢
人的出生日期
而不是
人的开始日期
:)

是的,如果你想要相同的长度,它是顶部和底部:)你忽略了最明显的强迫症状。。。互补名称的字母数必须相同。来吧,承认吧!