Есть ли причины не использовать слово «это» («Я», «Я», …)?
-
22-07-2019 - |
Вопрос
Я читаю этот ответ и его комментарии, и мне любопытно:Есть ли причины не использовать this
/ Self
/ Me
?
КСТАТИ:Извините, если об этом уже спрашивали, похоже, невозможно найти слово this
на СО.
Решение
Предупреждение: чисто субъективный ответ ниже.
Я думаю, что лучшая "причина" не использовать это / self / me - это краткость. Если это уже переменная / функция-член, зачем добавлять избыточный префикс? Р>
Лично я избегаю использования этого / 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;
}
}
Если вы используете StyleCop со всеми правилами, это заставляет вас вставить this.
. Поскольку я начал использовать его, я считаю, что мой код более читабелен, но это личное предпочтение.
Я думаю, что это не проблема, потому что это только добавляет читаемости к коду, что хорошо.
Для некоторых языков, таких как PHP, даже обязательно ставить префикс $ this- > если вам нужно использовать поля или методы класса.
Мне не нравится тот факт, что некоторые строки излишне длиннее, чем они могли бы быть, если бы в PHP был какой-то способ ссылаться на членов класса без него.
Я лично считаю, что this.whither
менее читабельно. Вы можете не заметить разницу в двухстрочном методе, но подождите, пока вы не получите this.variable
и this.othervariable
везде в классе.
Кроме того, я думаю, что использование this.
было найдено в качестве замены части очень ненавистной венгерской нотации. Некоторые люди там узнали, что читателю все еще понятнее видеть, что переменная является членом класса, и this.
добились цели. Но зачем обманывать себя и не использовать для этого старый добрый " m_ "
или просто " _ "
, если нам нужна дополнительная ясность? Это 5 символов против 2 (или даже 1). Меньше печатать, тот же результат.
Сказав это, выбор стиля по-прежнему зависит от личных предпочтений. Трудно убедить кого-то, что раньше читал код определенным образом, и это полезно для его изменения.
хорошо, eclipse делает цветовые поля, аргументы и локальные переменные разными цветами, поэтому, по крайней мере, работая в среде eclipse, нет необходимости синтаксически различать поля, чтобы специально пометить их как " поля " для себя и будущих поколений. Р>
Об этом раньше спрашивали в переменной " в java " контекст:
Вы ставите префикс переменной вашего экземпляра с & # 8216; this & # 8217; в Яве?
Основная причина, по-видимому, такова:
" увеличивает визуальный шум, который необходимо просеять, чтобы найти смысл кода. "
Читаемость, другими словами ... которую я не покупаю, я считаю this.
очень полезной.
Это звучит как чепуха для меня. Использование «this» может сделать код лучше, и я не вижу проблем с ним. Такая политика глупа (по крайней мере, когда вы даже не говорите людям, почему они на месте).
'этот.' В Кодексе всегда предлагает мне, что программитель использовал Intellisense (или другие эквиваленты IDE), чтобы сделать свою тяжелую работу.
Я, конечно, в этом виноват, однако я их потом из чисто тщеславных соображений удаляю.
Единственные другие причины, по которым я их использую, — это квалификация неоднозначной переменной (плохая практика) или создание метода расширения.
Квалификация переменной
string name; //should use something like _name or m_name
public void SetName(string name)
{
this.name = name;
}
что касается меня, я использую this
для вызова методов экземпляра объекта, тогда как self
для статического метода
В VB.NET одной из распространенных практик, которую я использую, является следующий код:
Class Test
Private IntVar AS Integer
Public Function New(intVar As Integer)
Me.Intvar = intvar
End Function
End Class
Не всегда, но в основном Я / это / я очень полезно. Разъясняет область, о которой вы говорите.
В типичном методе установки (взятом из ответа Лагердалека):
string name;
public void SetName(string name)
{
this.name = name;
}
Если вы не используете его, компилятор не узнает, что вы ссылаетесь на переменную-член.
Использование this.
говорит компилятору о том, что вам нужен доступ к переменной-члену, что выходит за пределы непосредственной области применения метода. Создание переменной внутри метода, имя которой совпадает с именем переменной-члена, является абсолютно допустимым, точно так же, как переопределение метода в классе, который расширил другой класс, является совершенно допустимым.
Однако, если вам все еще нужно использовать метод суперкласса, вы используете super.
По моему мнению, используйте это. не хуже, чем при использовании супер. и дает программисту больше гибкости в их коде.
Насколько я понимаю, читаемость даже не влияет на это, все зависит от доступности ваших переменных.
В конце концов, это всегда вопрос личного выбора.Лично я использую следующее соглашение о кодировании:
public class Foo
{
public string Bar
{
get
{
return this.bar;
}
/*set
{
this.bar = value;
}*/
}
private readonly string bar;
public Foo(string bar)
{
this.bar = bar;
}
}
Так что для меня «это» на самом деле необходимо, чтобы конструктор оставался читаемым.
Редактировать:точно такой же пример был опубликован пользователем «sinje», когда я писал код выше.
Я не только часто использую «это».Я иногда использую «это».
class Foo
{
private string bar;
public int Compare(Foo that)
{
if(this.bar == that.bar)
{
...
И так далее.«Это» в моем коде обычно означает другой экземпляр того же класса.