Использование подчеркивания в переменных Java и именах методов

Даже сейчас я часто вижу символы подчеркивания в переменных и методах Java, примером которых являются переменные-члены (например, «m_count» или «_count»). Насколько я помню, использование подчеркивания в таких случаях Sun считает плохим стилем.

Единственное место, где они должны использоваться, - это константы (например, в «public final static int IS_OKAY = 1;»), потому что константы должны быть все в верхнем регистре, а не в верблюжьем регистре. Здесь подчеркивание должно сделать код более читабельным.

Считаете ли вы, что использование подчеркивания в Java - плохой стиль? Если да (или нет), то почему?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
83
0
105 848
15
Перейти к ответу Данный вопрос помечен как решенный

Ответы 15

Ответ принят как подходящий

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

Самая важная вещь в стиле кодирования - это последовательность. Если вам не с чем согласиться, то рекомендации поставщика языка, вероятно, станут хорошим началом.

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

Georgi 30.09.2008 01:14

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

Halil 02.03.2017 16:54

это похоже на именование интерфейсов таким образом: ReadableInterface - абсолютно избыточный. В современных IDE вам не нужно указывать тип переменной или ее диапазон - раскраска и быстрый переход делают всю работу за вас. Итак, IMO, это плохой стиль, поскольку вы вводите избыточные символы и заставляете людей читать / поддерживать его.

kiedysktos 12.06.2017 13:20

использование "m_" или "_" перед переменной упрощает обнаружение переменных-членов в методах по всему объекту.

В качестве дополнительного преимущества, ввод "m_" или "_" заставит intellsense сначала их вывести;)

Если вы программируете на Java, скорее всего, у вас будет IDE, которая будет окрашивать ваши переменные-члены в другой цвет. "m_" просто противно.

JeeBee 29.09.2008 23:23

Я предпочитаю "его", поскольку оно хорошо читается: if (itsEmail.equals(email))

davetron5000 29.09.2008 23:26

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

S.Lott 29.09.2008 23:28

Правила:

  1. Делайте то, что делает код, который вы редактируете
  2. Если №1 не подходит, используйте camelCase, без подчеркивания

Это смесь стилей кодирования. Одна из школ состоит в том, чтобы перед частными членами ставить знак подчеркивания, чтобы различать их.

setBar( int bar)
{
   _bar = bar;
}

вместо

setBar( int bar)
{
   this.bar = bar;
}

Другие будут использовать подчеркивание, чтобы указать временную локальную переменную, которая выйдет за пределы области видимости в конце вызова метода. (Я считаю это довольно бесполезным - хороший метод не должен быть таким длинным, и объявление находится ПРЯМО ЗДЕСЬ! Так что я знаю, что он выходит за рамки) Редактировать: не дай Бог сотрудничать программисту из этой школы и программисту из школы memberData ! Это был бы ад.

Иногда сгенерированный код будет начинать переменные с помощью _ или __. Идея в том, что ни один человек никогда этого не сделает, так что это безопасно.

В вашем случае я использую следующее: setBar (int aBar) {bar = aBar; } Читабельный без этого. или _bar ...

Georgi 30.09.2008 01:20

Это достаточно справедливо, но затем в сигнатуре метода в API появляется aBar, и я думаю, что это выглядит беспорядочно.

Chris Cudmore 30.09.2008 20:49

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

Joe Plante 18.01.2013 00:34

Я считаю, что любой стиль, который нарушает правила стиля языка (без уважительной причины), уродлив и, следовательно, «плох».

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

Некоторые люди просто не могут адаптироваться к новым стилям кодирования ...

Я в основном согласен с философией «делай как другие» при кодировании, но не как абсолют. Я думаю, есть очень веский аргумент в пользу того, что при разумной длине идентификатора snake_cased_variables легче читать, чем CamelCasedVariables. Мое оправдание состоит в том, что визуальное снижение когнитивной нагрузки - это мелочь, но все же полезно. Люди ценят пробелы в коде при чтении документов и прослушивании музыки. Я считаю, что случай с верблюдами - это вызов пустому пространству во имя «эффективности». Эффективность для кого?

David J. 27.10.2011 20:10

«Плохой стиль» очень субъективен. Если определенные условности работают для вас и вашей команды, я думаю, это будет считаться плохим / хорошим стилем.

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

(Я почти никогда не использую «это», кроме как для предотвращения конфликта имен.)

Как вы сказали, стиль очень субъективен. Я обычно использую this для обозначения переменной-члена, если считаю, что на нее нужно обратить внимание. Однако я не фанат.

Chris Cudmore 29.09.2008 23:36

Причина, по которой люди это делают (по моему опыту), заключается в том, чтобы различать переменные-члены и параметры функций. В Java у вас может быть такой класс:

public class TestClass {
  int var1;

  public void func1(int var1) {
     System.out.println("Which one is it?: " + var1);
  }
}

Если бы вы сделали переменную-член _var1 или m_var1, у вас не было бы двусмысленности в функции.

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

В этом случае я обычно переименовываю параметр как «aVar1». В отличие от "var1".

Lluis Martinez 19.08.2009 21:24

sunDoesNotRecommendUnderscoresBecauseJavaVariableAndFunctionNamesTendToBeLongEnoughAsItIs();

as_others_have_said_consistency_is_the_important_thing_here_so_chose_whatever_you_think_is_more_readable();

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

Georgi 30.09.2008 01:24

Если уже используется «конфликтующее» соглашение об именах, я думаю, это зависит от того, о каком объеме кода мы говорим. Я бы не рекомендовал переписывать тысячи строк кода просто для перехода от old_convention к newConvention, учитывая, что старое соглашение используется последовательно.

Anders Sandvig 30.09.2008 01:55

РЖУ НЕ МОГУ! При этом, когда код вставляется в редакторы, в которых есть проверка орфографии, то «неправильно написанные» слова подчеркиваются, тем самым скрывая подчеркивание. Это хорошая причина не использовать символы подчеркивания. Кроме того, корпус Camel короче. Наконец, клавишу Shift легче использовать для букв, чем для верхнего ряда (например, сдвиг тире '-').

Tihamer 20.03.2019 20:51

@Tihamer Другие утверждают, что форму snake_case легче читать. Я определенно утверждаю, что это так, особенно с короткими словами (1-2 буквы). Что касается слова «трудно набирать», то вводить слово с помощью функции lotOfMixedCaseWithinIt тоже не совсем удобно. Я бы сказал, что это вопрос того, к чему вы привыкли. Однако в Java я говорю «используйте общую форму», как рекомендовано JLS / etc. В Ruby / Python / C используйте snake case. И так далее...

Per Lundberg 16.04.2019 12:36

Лично я считаю, что язык не должен делать правила в отношении стиля кодирования. Это вопрос предпочтений, использования, удобства, концепции удобочитаемости. Теперь проект должен устанавливает правила кодирования для согласованности между листингами. Вы можете не согласиться с этими правилами, но вы должны их придерживаться, если хотите внести свой вклад (или работать в команде).

По крайней мере, такие IDE, как Eclispe, являются агностическими, позволяя устанавливать такие правила, как префиксы или суффиксы переменных, различные стили размещения скобок и управления пространством и т. д. Таким образом, вы можете использовать его для переформатирования кода в соответствии с рекомендациями ваш.

Примечание: я принадлежу к тем, кто сохраняет свои старые привычки от C / C++, кодируя Java с префиксами m_ для переменных-членов (и s_ для статических), добавляя логические префиксы с начального b, используя начальную заглавную букву для имен функций и выравнивая фигурные скобки. .. Ужас для Java-фундаменталистов! ;-)
Как ни странно, это соглашения, которые используются там, где я работаю ... вероятно, потому, что основной начальный разработчик происходит из мира MFC! :-D

Вот связь к рекомендациям Sun для Java. Не то, чтобы вы должны использовать их или даже то, что их библиотечный код следует за всеми ними, но это хорошее начало, если вы собираетесь с нуля. Такой инструмент, как Eclipse, имеет встроенные средства форматирования и инструменты очистки, которые могут помочь вам соответствовать этим соглашениям (или другим, которые вы определяете).

Для меня "_" слишком сложно набирать :)

Приятно иметь что-нибудь, чтобы отличать частные переменные от общедоступных, но мне не нравится "_" в общем коде. Если я могу помочь ему в новом коде, я избегаю их использования.

  • Мне нравятся начальные подчеркивания для (частных) переменных экземпляра, их легче читать и различать. Конечно, это может вызвать у вас проблемы с крайними случаями (например, общедоступные переменные экземпляра (не общие, я знаю) - в любом случае вы называете их, возможно, вы нарушаете свое соглашение об именах:
  • private int _my_int; public int myInt;? _my_int? )

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

-автоматизированная генерация кода (например, геттеры, сеттеры eclipse) вряд ли поймут это, поэтому вам придется исправить это вручную или использовать eclipse, чтобы заставить его распознать.

В конечном счете, вы идете против предпочтений остального (java) мира и, вероятно, будете испытывать некоторые неудобства от этого. И, как упоминалось в предыдущих плакатах, согласованность кодовой базы превосходит все вышеперечисленные проблемы.

Настроить Eclipse для понимания ваших предпочтений префикса (или суффикса) довольно просто. В Настройки-> Java-> Стиль кода есть таблица, в которой вы можете установить соглашения об именах переменных для полей, статических полей, статических конечных полей, параметров и локальных переменных. Похоже, что все генераторы кода соблюдают эти настройки.

metasim 09.04.2012 17:21

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

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

Мой личный стиль - использовать m_ вместо _. Причина в том, что существуют также глобальные и статические переменные. Преимущество m _ / _ в том, что он различает область видимости переменных. Таким образом, вы не можете повторно использовать _ для глобального или статического, и вместо этого я выбираю g_ и s_ соответственно.

Этот вопрос касался вопросов подчеркивания Java в целом, а не того, чтобы задавать их только в переменных-членах (хотя это был пример в вопросе).

Georgi 30.09.2008 04:01

Значит, вы отметили меня за то, что я прокомментировал часть вопроса? Кажется немного экстремальным

JaredPar 30.09.2008 04:01

@JaredPar - вы единственный, кто предлагает хороший альтернативный стиль. +1 за это.

djangofan 24.04.2013 00:51

Написание this.foo (или this-> foo в C++), вероятно, было бы гораздо более ясным способом различения локальных переменных и переменных полей / членов.

Kevin 08.08.2014 05:59

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

Есть причина, по которой в старые времена использование подчеркивания считалось плохим стилем. Когда компилятор среды выполнения был чем-то недоступным, а мониторы поставлялись с потрясающим разрешением 320x240 пикселей, часто было непросто отличить _name от __name.

Вот почему OCaml никогда не запускается на старых машинах.

David Tonhofer 07.09.2017 16:03

Другие вопросы по теме