Language agnostic 我使用的变量名与它的类型仅因大小写不同,这是不道德的吗?

Language agnostic 我使用的变量名与它的类型仅因大小写不同,这是不道德的吗?,language-agnostic,coding-style,naming-conventions,variable-names,Language Agnostic,Coding Style,Naming Conventions,Variable Names,例如,以这段代码为例: var person = new Person(); 或者对你来说,蟒蛇: person = Person() 我经常被告知这有多糟糕,但还没有看到这两行代码不道德的例子。对我来说,人就是一个人,试图给它取另一个名字是浪费时间。我想在语法突出显示之前的日子里,这会是一件大事。但是现在,很容易区分类型名和变量名。见鬼,从这里很容易看出区别 还是我遗漏了什么?如果是这样的话,如果您能提供一个导致问题的代码示例,那将非常有帮助。那些告诉您这不好的原因是什么?我总是这样做。这

例如,以这段代码为例:

var person = new Person();
或者对你来说,蟒蛇:

person = Person()
我经常被告知这有多糟糕,但还没有看到这两行代码不道德的例子。对我来说,人就是一个人,试图给它取另一个名字是浪费时间。我想在语法突出显示之前的日子里,这会是一件大事。但是现在,很容易区分类型名和变量名。见鬼,从这里很容易看出区别


还是我遗漏了什么?如果是这样的话,如果您能提供一个导致问题的代码示例,那将非常有帮助。

那些告诉您这不好的原因是什么?我总是这样做。这是命名类型的单个变量的最简单、表达方式。如果需要两个
Person
对象,那么可以在
Person
前面加上有意义的形容词,如

fastPerson
slowPerson
否则只是

person

对我来说没问题。

我不认为它一定是“坏的”,但很明显,如果你能限定它,给它更多的上下文,比如它是什么样的人(你只与许多可能的人中的一个打交道),那么其他人可能会更好地理解它。

我在方法签名中经常使用这种模式。如果我不能提供一个替代的描述性名称,那么IMHO,这没有什么错


错的是,如果你有两种类型的人和人,那么这是非常非常错误的

杰森-我不知道是谁告诉你这很糟糕。许多作者将此用作表示类(大写)实例(小写)的标准方式

我经常使用它,因为我发现小写变量实际上不仅告诉我这是一个实例,还告诉我类的名称


除非有人有一个有力的论点与此相反,否则我肯定会继续这样做。

我说的是它的名称:如果变量代表一个有2条狗的人,请将其称为
personWith2Dogs
。如果变量的作用域很短(比如循环变量),那么person就可以了

我也这样做,我也不明白为什么这样做应该是“不道德的”。
虽然我可以理解它有时会令人困惑,但今天我们有了带有intellisense和语法突出显示的IDE,这将确保(如果您犯了错误并引用了变量而不是类,反之亦然),您会很快看到错误。我们还有编译器。:)

我一直使用它作为临时对象引用。我会像避免原始数据类型的瘟疫一样避免它

Person person = new Person(); // okay

int Int = 42; // pure evil

这些人使用的确切论点是什么

如果他们不允许你使用人作为变量名,你可能会考虑添加“A”前缀。

aPerson = Person()

我想说的是,当你创建一个对象时,你可能会想到一些特定的用途。单独的类型很少反映这种用法

因此,如果要在通讯簿应用程序中创建新联系人,可能需要调用变量
newContact

如果您正在对代码进行单元测试,以检查未设置名称的
Person
对象的行为,您可能希望将它们称为
unnamedPerson
或类似的名称


简单地称它为
就放弃了让代码自我记录的大好机会。

如果这个人在上下文中是一个普通人,那么“人”是一个非常好的名字。当然,如果这个人在代码中有一个特定的角色,那么最好用这个角色来命名她。

我也认为这种做法没有任何问题。只要该类只有一个变量,就很容易编写和读取。在我看来,这甚至适用于基本的文本编辑器。我个人不记得有人说这很糟糕甚至不道德。继续这样做:)

我认为您可能想到的“规则”更多地用于基本类型,以及类名使变量名变差的类

例如,如果您正在处理在线商店中特定商品的成本计算,那么以下代码将不是一个好的格式:

Decimal _decimal = item.BaseCost + item.Tax;

相反,建议使用更具描述性的名称,如“总计”或“成本”。

我发现这种情况的唯一问题是,您是否希望私人成员和公共财产使用相同的名称

如果它们只是大小写不同,那么它在区分大小写的语言(如C#)中可以正常工作,但在VB.NET中则不行

例如,在VB中,我会编写

Private _name As String
但是


我在C#中也会这样做,这样从一个到另一个的翻译是无痛的。这也使它不那么容易出错,因为它很容易误读,或者实际上是误写只因大小写不同的单词。

我自己经常使用
Person=new Person()。常用于Java/C#

虽然我昨天想知道为什么

private enum DataType {NEW, OLD}
在C#中不起作用


特别是了解如何使用
String
String
Double
Double
,。。。随意使用C#。

并非不道德,但如果变量的最佳名称是类型名称,则可能有错误,或者您只是在进行概念证明或诸如此类的事情。对我来说,变量名必须指业务上下文中的含义,而不是指编程语言。理解代码将更加困难。

我不会说这很可怕。在这种情况下,我通常在变量名前面加上“a”,以表明它是该类型的单个实例,所以我会这样做

Person aPerson = new Person();

我认为这会让代码读起来更自然。

它被认为不好的原因是,如果你将来需要两个人的,那么你就可以得到这样的代码

Person=新人()

Person person2=新的Person()

那将接近于“坏”。然而,在这种情况下,你应该重构你的原始人
Person aPerson = new Person();
Person person = new Person()
string Person;
string person;
int Int = 0;
string String = "hi there";
var abc = new Person();
void SaveToDatabase(Person person) {...}
void AddToAccount(Account account, Person person)  {...}
void AddToAccount(Account account, Person dependent)  {...}