Должны ли вы использовать международные идентификаторы в Java / C #?

StackOverflow https://stackoverflow.com/questions/61615

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Я бы придерживался английского языка просто потому, что обычно вы никогда не знаете, кто работает над этим кодом, и потому, что некоторые сторонние инструменты, используемые в процессе сборки / тестирования / отслеживания ошибок, могут иметь проблемы.Печатать äöüß на не немецкой клавиатуре - это просто ЛАВАШ, и я просто считаю, что любой, кто занимается разработкой программного обеспечения, должен говорить по-английски, но, возможно, это просто мое высокомерие как человека, не являющегося носителем английского языка.

То, что вы называете "американским высокомерием", заключается не в том, использует ли ваша программа международные имена переменных, а в том, что ваша программа думает, что "Währung" и "Вахрунг" - это одни и те же слова.

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

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

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

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

Если в вашей компании не говорят по-английски, и вы считаете, что в дизайне, ориентированном на домен, что-то есть, тогда есть еще один аспект:Как нам, разработчикам, использовать тот же язык предметной области, что и для нашего бизнеса, без каких-либо затрат на перевод?

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

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

Раньше я работал в команде разработчиков, которые с радостью подтирали себе задницы любыми соглашениями об именовании (и, если уж на то пошло, любыми другими соглашениями о кодировании).Хотите верьте, хотите нет, но необходимость иметь дело с "а" и "о" в коде стала одним из факторов, побудивших меня уйти в отставку.Хотя я финн, я предпочитаю писать код с настройками клавиатуры в США, потому что фигурные и квадратные скобки неудобны при написании на финской клавиатуре (попробуйте right alt и 7 и 0 для завитушек).

Поэтому я предлагаю придерживаться символов ascii.

Вот пример о том, где я использовал идентификаторы, отличные от ASCII, потому что я нашел это более читабельным, чем замена греческих букв их английскими названиями.Несмотря на то, что у меня на клавиатуре нет θ или φ (я полагался на функцию копирования и вставки).)

Однако все это локальные переменные.Я бы не использовал идентификаторы, отличные от ASCII, в общедоступных интерфейсах.

Это зависит:

  • Соответствует ли ваша команда каким-либо существующим стандартам, требующим использования ASCII?
  • Будет ли ваш код когда-нибудь реально использован повторно или прочитан кем-то, кто не говорит на вашем родном языке?
  • Представляете ли вы сценарий, при котором вам нужно будет обратиться за помощью онлайн и, следовательно, вы не сможете скопировать и вставить пример вашего кода как есть?
  • Вы уверены, что весь ваш набор инструментов поддерживает кодирование кода?

Если вы ответили "да" на любой из вышеперечисленных вопросов, используйте только ASCII.Если нет, действуйте на свой страх и риск.

ЕСЛИ ты пройдешь мимо другие предварительные условия затем у вас есть один дополнительный (ИМХО, более важный) вопрос - насколько сложно ввести символ.

На моей обычной клавиатуре в США единственный известный мне способ ввести букву ç - это удерживать alt и нажать 0227 на цифровой клавиатуре или скопировать и вставить.

Это было бы ОГРОМНЫМ препятствием на пути быстрого набора текста.Вы же не хотите замедлять свое кодирование подобными тривиальными вещами, если вас к этому не принуждают.Международные клавиатуры могут облегчить эту проблему, но что тогда произойдет, если вам придется кодировать на вашем ноутбуке, на котором нет международной клавиатуры, и т.д.?

Частично проблема заключается в том, что язык Java / C # и его библиотеки основаны на английских словах типа if и toString().Лично я не хотел бы переключаться между неанглийским языком и английским во время чтения кода.

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

Я бы придерживался символов ASCII, потому что, если кто-либо из вашей команды разработчиков использует SDK, который поддерживает только ASCII, или вы хотите сделать свой код с открытым исходным кодом, может возникнуть много проблем.Лично я бы не стал этого делать, даже если вы не планируете привлекать к проекту кого-либо, кто не говорит на этом языке, потому что вы управляете бизнесом, и мне кажется, что тот, кто управляет бизнесом, хотел бы, чтобы его бизнес расширялся, что в наши дни означает преодоление национальных границ.Мое мнение таково, что английский - это язык области, и даже если вы называете свои переменные на другом языке, практически нет смысла использовать какие-либо символы, отличные от ASCII, в вашем программировании.Оставьте это на усмотрение языка, чтобы справиться с этим, если вы обрабатываете данные в формате UTF8:моя программа для iPhone (которая включает в себя тонны пользовательских данных, передаваемых между телефоном и сервером) имеет полную поддержку UTF8, но не имеет UTF8 в исходном коде.Просто кажется, что открывать такую большую банку с червями практически бесполезно.

Существует еще одна проблема с использованием символов, отличных от ASCII, хотя она, вероятно, пригодится только в неясных случаях.Разрешенными символами являются определенный с точки зрения методов Символ.Является javaidentifierstart(int) и Символ.Является javaidentifierpart(int), которые определяются в терминах Unicode.Однако точная используемая версия Unicode зависит от версии платформы Java, как указано в документации для java.lang.Символ.

Поскольку свойства символов незначительно меняются от одной версии Unicode к следующей, возможно (но, вероятно, очень маловероятно), что у вас могут быть идентификаторы, которые действительны в одной версии Java, но не в следующей.

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

Для скандинавских языков и немецкого, на которых я могу говорить и, следовательно, выступаю за них, я бы, по крайней мере, рекомендовал использовать стандартные замены, т.е.

ä/æ -> ae, ö/ø -> oe, å -> aa, ü -> ue

и т.д.на всякий случай, поскольку другим пользователям может быть трудно вводить исходные буквы без изменения клавиатуры / раскладки клавиш.Подумайте, если бы вам вдруг пришлось работать с кодовой базой, где разработчики использовали третий язык (например, включая французский ç) и не сделали этого..По моему опыту, переключение между более чем 2 картами клавиш для эффективного ввода текста было бы болезненным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top