Есть ли причины не использовать «это» («Я», «Я», ...)? - PullRequest
10 голосов
/ 02 декабря 2008

Я прочитал этот ответ и его комментарии, и мне любопытно: есть ли причины не использовать this / Self / Me?

Кстати: извините, если раньше об этом спрашивали, кажется, что невозможно найти слово this на SO.

Ответы [ 15 ]

9 голосов
/ 02 декабря 2008

Предупреждение: чисто субъективный ответ ниже.

Я думаю, что лучшая "причина" не использовать это / self / me - это краткость. Если это уже переменная / функция-член, зачем добавлять избыточный префикс?

Лично я избегаю использования этого / self / me, если нет необходимости устранять неоднозначность определенного выражения для компилятора. Многие люди не согласны с этим, но у меня никогда не было, чтобы это было камнем преткновения в любой группе, в которой я работал.

8 голосов
/ 02 декабря 2008

Я думаю, что большинство распространенных сценариев было рассмотрено в двух уже упомянутых постах; в основном краткость и избыточность по сравнению с ясностью - незначительное дополнение: в C # требуется использовать «this» для доступа к «методу расширения» для текущего типа - т.е.

this.Foo();

где Foo() внешне объявлено как:

public static void Foo(this SomeType obj) {...}
5 голосов
/ 02 декабря 2008

В некоторых случаях это уточняется, например, этот пример в c #:

public class SomeClass
{
    private string stringvar = "";

    public SomeClass(string stringvar)
    {
        this.stringvar = stringvar;
    }
}
3 голосов
/ 02 декабря 2008

Если вы используете StyleCop со всеми правилами, это заставляет вас ввести this.. Поскольку я начал использовать его, я считаю, что мой код более читабелен, но это личное предпочтение.

2 голосов
/ 02 декабря 2008

хорошо, eclipse делает поля цветов, аргументы и локальные переменные разными цветами, поэтому, по крайней мере, работая в среде eclipse, нет необходимости синтаксически различать поля, чтобы специально пометить их как «поля» для себя и будущих поколений.

2 голосов
/ 02 декабря 2008

Лично я считаю, что this.whatever менее читабелен. Вы можете не заметить разницу в двухстрочном методе, но подождите, пока вы не получите this.variable и this.othervariable везде в классе.

Кроме того, я думаю, что использование this. было найдено в качестве замены части очень ненавистной венгерской нотации. Некоторые люди там узнали, что читателю все еще яснее видеть, что переменная является членом класса, и this. добился цели. Но зачем обманывать себя и не использовать для этого старый добрый "m_" или просто "_", если нам нужна дополнительная ясность? Это 5 символов против 2 (или даже 1). Меньше печатать, тот же результат.

Сказав это, выбор стиля остается вопросом личных предпочтений. Трудно убедить кого-то, кто когда-то читал код определенным образом, что полезно для его изменения.

2 голосов
/ 02 декабря 2008

Я думаю, что это не проблема, потому что это только добавляет читаемости к коду, что хорошо.

Для некоторых языков, таких как PHP, даже обязательно использовать префикс $ this->, если вам нужно использовать поля или методы класса.

Мне не нравится тот факт, что некоторые строки излишне длиннее, чем они могли бы быть, если бы у PHP был какой-то способ ссылаться на членов класса без него.

1 голос
/ 02 декабря 2008

'это. в коде всегда подсказывает мне, что кодер использовал intellisense (или другие эквиваленты IDE) для выполнения своей тяжелой работы.

Я, безусловно, виновен в этом, однако я, по причинам тщеславия, впоследствии удаляю их.

Единственными другими причинами, по которым я их использую, является определение неоднозначной переменной (плохая практика) или создание метода расширения

Квалификация переменной

string name; //should use something like _name or m_name

public void SetName(string name)
{
     this.name = name;
}
1 голос
/ 02 декабря 2008

Это звучит как глупость для меня. Использование «this» может сделать код лучше, и я не вижу проблем с ним. Такая политика глупа (по крайней мере, когда вы даже не говорите людям, почему они на месте).

1 голос
/ 02 декабря 2008

Это действительно было задано ранее, в контексте "variable in java":

Вы префикс вашей переменной экземпляра с "this" в Java?

Основная повторяющаяся причина, по-видимому:

«это увеличивает визуальный шум, который вам нужно просеять, чтобы найти значение кода».

Читаемость, другими словами ... которую я не покупаю, я считаю this. очень полезной.

...