我读了这篇回答以及它的评论,我很好奇:不使用this
/ Self
/ Me
的原因是什么?
顺便说一句:如果之前有人问过这个问题,我很抱歉,似乎在SO上无法搜索this
这个词。
我读了这篇回答以及它的评论,我很好奇:不使用this
/ Self
/ Me
的原因是什么?
顺便说一句:如果之前有人问过这个问题,我很抱歉,似乎在SO上无法搜索this
这个词。
警告:以下纯属主观见解。
我认为不使用this/self/me的最好“理由”是简洁性。如果它已经是成员变量/函数,那么为什么要冗余地添加前缀呢?
个人而言,除非需要消除编译器中特定表达式的歧义,否则我避免使用this/self/me。许多人对此持不同意见,但我在任何工作组中都没有真正遇到过这个棘手问题。
我认为在已经引用的两篇文章中,涵盖了大多数常见场景;主要是简洁和冗余与清晰度之间的平衡 - 还有一个小细节:在C#中,必须使用"this"才能访问当前类型的"扩展方法" - 也就是说
this.Foo();
其中 Foo()
是在外部声明的:
public static void Foo(this SomeType obj) {...}
有些情况下需要进行澄清,比如在c#中的这个例子:
public class SomeClass
{
private string stringvar = "";
public SomeClass(string stringvar)
{
this.stringvar = stringvar;
}
}
this.
。自从我开始使用它后,我发现我的代码更易读,但这是个人偏好。我认为这不是问题,因为它只会增加代码的可读性,这是一件好事。
对于一些语言,比如PHP,如果你需要使用类字段或方法,则必须以$this->为前缀。
我不喜欢这个事实,因为它使某些行比它们本来可以的更长,如果PHP有一种不需要它来引用类成员的方法,那就更好了。
this.whatever
不够易读。在一个类中到处都是this.variable
和this.othervariable
时,您可能不会注意到两行方法的区别。
此外,我认为使用this.
是作为深受憎恶的匈牙利符号的替代品之一。有些人发现,让读者看到变量是类成员仍然更清晰,并且this.
可以解决这个问题。但是,如果我们需要额外的清晰度,为什么要欺骗自己而不使用纯老式的"m_"
或简单的"_"
? 5个字符与2个(甚至1个)相比,输入更少,结果相同。在Eclipse中,它会用不同的颜色来区分字段、参数和局部变量,因此至少在Eclipse环境下,没有必要在语法上区分字段以将它们特别标记为“字段”,以便自己和后代更好地理解。
这个问题之前确实被问过,在“Java变量”背景下:
主要的经常出现的原因似乎是:
“它增加了需要筛选以查找代码含义的视觉噪音。”
换句话说,可读性... 我不认同,我发现 this.
非常有用。
对我来说,那听起来像是胡说八道。使用“this”可以使代码更加优美,我看不出有什么问题。这样的策略很愚蠢(至少当你甚至不告诉人们为什么要这样做时)。
就我而言,我使用this
来调用实例化对象的方法,而self
则用于静态方法。