Какой префикс вы используете для переменных-членов? - PullRequest
32 голосов
/ 21 сентября 2008

Несомненно, для понимания кода важно назначить переменным-членам префикс, чтобы их можно было легко отличить от «обычных» переменных.

Но какой префикс вы используете?

Я работал над проектами, в которых мы использовали m_ в качестве префикса, в других проектах мы использовали только подчеркивание (что мне лично не нравится, потому что только подчеркивание недостаточно демонстративно).

В другом проекте мы использовали форму длинного префикса, которая также включала тип переменной. Например, mul_ - это префикс переменной m типа u nsigned l ong.

Теперь дайте мне знать, какой префикс вы используете (и, пожалуйста, укажите причину).

РЕДАКТИРОВАТЬ: Большинство из вас, кажется, кодируют без специальных префиксов для переменных-членов! Это зависит от языка? Исходя из моего опыта, C ++ код имеет тенденцию использовать подчеркивание или m_ в качестве префикса для переменных-членов. А как насчет других языков?

Ответы [ 33 ]

3 голосов
/ 21 сентября 2008

Большую часть времени я использую python. Python требует, чтобы вы использовали self.foo для доступа к атрибуту foo экземпляра текущего класса. Таким образом, проблема путаницы локальных переменных, параметров и атрибутов экземпляра, с которым вы работаете, решена.
Как правило, мне нравится такой подход, хотя я не люблю, когда его заставляют это делать. Таким образом, мой идеальный способ сделать это - не делать этого и использовать некоторую форму доступа к атрибутам для этого или себя для извлечения переменных-членов. Таким образом, мне не нужно загромождать имена метаданными.

3 голосов
/ 21 сентября 2008

Это действительно зависит от языка. Я парень на C ++, и префикс всего с подчеркиванием немного хитрый. Язык резервирует материал, который начинается с подчеркивания для реализации в некоторых случаях (в зависимости от области действия). Также есть специальный режим для двойного подчеркивания или подчеркивания, следующего за заглавной буквой. Поэтому я говорю, просто избегайте этого беспорядка и просто выберите другой префикс. «М» в порядке ИМО. «М_» немного много, но и не страшно. Дело вкуса действительно.

Но не упустите эти _leadingUnderscores. Вы будете удивлены, как много внутренних компонентов компилятора и библиотеки, и определенно есть место для аварий и путаницы, если вы не будете очень осторожны. Просто скажи нет.

3 голосов
/ 23 сентября 2008

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

2 голосов
/ 21 сентября 2008

еще один трюк - соглашение об именах :

Все переменные-члены называются как обычно, без префиксов (или «this.», Как это обычно делается в проекте)

Но их будет легко отличить от локальной переменной, потому что в моем проекте эти локальные переменные всегда называются:

  • a Что-то: представляет один объект.
  • некоторые ManyThings: список объектов.
  • равен AState или имеет SomeThing: для логического состояния.

Любая переменная, которая не начинается с «a», «some» или «is / has», является переменной-членом.

2 голосов
/ 21 сентября 2008

Так как VB.NET не чувствителен к регистру, я добавляю к моим переменным-членам префикс подчеркивания и верблюжий регистр остальной части имени. Я пишу названия объектов с большой буквы.

Dim _valueName As Integer

Public Property ValueName() As Integer
2 голосов
/ 11 декабря 2010

_ вместо this.

Я также использую _ вместо this., потому что он просто короче ( 4 символов меньше) и это хороший индикатор переменных-членов. Кроме того, используя этот префикс, вы можете избежать конфликтов имен. Пример:

public class Person {
  private String _name;

  public Person(String name) {
    _name = name;
  }
}

Сравните это с этим:

public class Person {
  private String name;

  public Person(String name) {
    this.name = name;
  }
}

Первый пример кажется мне короче и понятнее.

2 голосов
/ 22 сентября 2008

Я извращенец, и я добавляю переменные-члены к инициалам из имени класса (которое занято верблюдом).

TGpHttpRequest = class(TOmniWorker)
strict private
  hrHttpClient  : THttpCli;
  hrPageContents: string;
  hrPassword    : string;
  hrPostData    : string;

Большинство людей Delphi просто используют F.

TGpHttpRequest = class(TOmniWorker)
strict private
  FHttpClient  : THttpCli;
  FPageContents: string;
  FPassword    : string;
  FPostData    : string;
2 голосов
/ 22 сентября 2008

Одиночный _ используется только в качестве визуального индикатора. (С #)

  • помогает группировать членов с intellisense.
  • легче определить переменные-члены при чтении кода.
  • труднее скрыть переменную-член с локальным определением.
2 голосов
/ 22 сентября 2008

Я с людьми, которые не используют префиксы.

Среды разработки настолько хороши в наши дни, что легко найти информацию о переменной с помощью раскраски синтаксиса, всплывающих подсказок при наведении мыши и простой навигации к ее определению.

Это поверх того, что вы можете получить из контекста переменных и соглашений об именах (таких как lowerCamelCase для локальных переменных и закрытых полей, UpperCamelCase для свойств и методов и т. Д.) И таких вещей, как "hasXXXX" и "isXX" для булевы.

Я не использовал префиксы в течение многих лет, но раньше я был "этим". префикс монстр, но я ушел от этого, если это абсолютно не нужно (спасибо, Решарпер).

1 голос
/ 21 сентября 2008

Я использую верблюжий чехол и подчеркиваю, как и многие здесь. Я использую подчеркивание, потому что я работаю с C #, и я привык избегать ключевого слова this в моих конструкторах. Я использую варианты с верблюжьим корпусом, поэтому подчеркивание напоминает мне о том, с чем я работаю в то время. В противном случае я не думаю, что это имеет значение, если вы не пытаетесь добавить ненужную информацию, которая уже очевидна в коде.

...