Подтвердить что ты не робот

Использует ли "this" для всех функций-членов и атрибутов плохой практики?

Недавно я разместил часть своего кода здесь и получил комментарий (не связанный с исходным вопросом), что с использованием this для всех функций-членов и атрибутов класса "не просто вопрос стиля персонального кодирования, это плохая практика" . К сожалению, человек отказался уточнить и сказал, чтобы я сам это просмотрел.

Я использовал Google кучу (но это действительно трудно найти что-либо с "this" в качестве ключевого слова), и огляделся здесь, но я нашел несколько. , когда this должен использоваться.

Я знаю ситуации, когда использование this неизбежно (параметр/переменная с тем же именем, наследование шаблона и т.д.), но со временем я начал использовать this везде, где это возможно, потому что я могу найти свой путь вокруг моего кода и быстрее. Мои причины включают в себя:

  • быстро проверить, должна ли функция f быть функцией-членом вообще: если в коде нет this, ее можно удалить из класса
  • быстрая проверка, если f может быть функцией const: если нет this с левой стороны, скорее всего, можно сделать const (не всегда, но я считаю это полезным при скимминге)
  • быстрая проверка, если объект "меняет" себя "предопределенным" способом в f или если он является составной функцией-членом (метод-член, вызываемый с this по сравнению с "внешним" алгоритмом, работающим на объект без этого)
  • отладки; то есть, если атрибуту элемента присваивается неправильное значение в любой точке, я должен сконцентрироваться на строках, содержащих this, чтобы найти проблему, поскольку другие строки не изменяют объект

Честно говоря, комментарий о том, что это "плохая практика", немного меня задрожал. Но один комментарий сам по себе не имеет большого значения, поэтому я бы хотел спросить , что-то по-своему плохое при использовании this последовательно для всех функций-членов и атрибутов? Если да, то что основные недостатки, которые ставят его (возможно, неуклюжий, непопулярный или не широко распространенный) персональный стиль и помещают его в категорию "плохая практика"?

4b9b3361

Ответ 1

Этот ответ основан на мнениях (как отмечают другие).

Я думаю, что это плохая практика, потому что:

  • он делает код более крупным, без необходимости (самый простой код для поддержки - это тот, который вы не пишете, потому что вам не нужно).
  • это неожиданно (в то время как вы можете ожидать этого, другие не будут - так что вы получите увеличенное соотношение WTF/SLOC в коде)
  • это увеличивает затраты на обслуживание.
  • Это требует дополнительных усилий для обеспечения согласованности кода (с небольшими или никакими дополнительными преимуществами).
  • пока он выглядит последовательным, он избыточен (аналогично объявлению всех экземпляров объекта синтаксисом class <class-name> var; вместо <class-name> var; и игнорированию "правила нуля" ).
  • он создает привычки кодирования, которые не будут соответствовать большинству команд разработчиков и стандартам кодирования.
  • Намного лучше переименовать переменные и функции, чтобы избежать коллизий имен, чем использовать this-> (потому что имена, которые вы используете для классов, функций и переменных, составляют ментальную модель, которую вы используете для понимания структуры кода).
  • после работы в течение нескольких месяцев в базе кода, которая не следует/не принимает эту практику, вы можете обнаружить, что ваш собственный код трудно читать/поддерживать (другими словами, через год или около того он может стать чистый рывок).

Ответ 2

Нет никаких технических причин, почему это невозможно использовать везде.

Если вас интересуют только технические причины, это ваш ответ. Однако я умоляю вас рассмотреть нетехнические причины. Мнения формируются по какой-то причине, некоторые из этих причин могут быть хорошими. Например, я бы предположил, что использование этого во всем случае уменьшит ремонтопригодность вашего кода, и вам будет лучше обслуживать пересмотр ваших схем именования.

Учтите, что обычно this используется там, где это необходимо, и нигде больше. Есть причины, по которым, как вы говорите, может потребоваться this, и когда большинство программистов сталкиваются с this, они будут задаваться вопросом сами: "Это должно быть необходимо здесь для неочевидной причины. Интересно, что это за причина."

Консистенция является важным атрибутом поддерживаемого кода. Одна из основных проблем с использованием this повсюду - это противоречиво - с большинством других практик программистов. Поскольку большинство других программистов не будут использовать this везде, когда вы будете использовать его везде, это затруднит их сохранение вашего кода.