Являются ли односимвольные константы лучше, чем литералы?

Недавно я столкнулся с классом, который обеспечивает почти каждый отдельный символ как константу; все от COMMA до BRACKET_OPEN. Интересно, нужно ли это; Я прочитал «статью» , в котором говорится, что может быть полезно вытащить одиночный -характерные литералы в константы. Итак, я настроен скептически.

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

Единственная причина, по которой я вижу использование констант вместо литералов, - сделать код более читаемым. Но city + CharacterClass.COMMA + state (например) действительно более читаемый, чем city + ',' + state?

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

122 голоса | спросил Austin Day 6 J000000Wednesday16 2016, 20:16:34

15 ответов


178

Tautology :

  

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

Здравый смысл подсказывает, что const char UPPER_CASE_A = 'A'; или const char A = 'A' не добавляет ничего, кроме обслуживания и сложности вашей системы. const char STATUS_CODE.ARRIVED = 'A' - это другой случай.

Константы должны представлять вещи, которые неизменяемы во время выполнения, но, возможно, в будущем они будут изменены во время компиляции. Когда const char A = правильно соответствует чему-либо, кроме A?

Если вы видите public static final char COLON = ':' в коде Java, найдите, кто его написал, и сломайте свои клавиатуры. Если представление для COLON когда-либо изменится с :, у вас будет кошмар обслуживания.

Obfuscation:

Что происходит, когда кто-то меняет его на COLON = '-', потому что там, где они используются, он нужен везде -? Собираетесь ли вы писать модульные тесты, которые в основном говорят assertThat(':' == COLON) для каждой ссылки const, чтобы убедиться, что они не изменяются? Только, чтобы кто-то исправить тест, когда они меняют их?

Если кто-то на самом деле утверждает, что public static final String EMPTY_STRING = ""; полезен и полезен, вы просто квалифицировали свои знания и смело игнорировали их во всем остальном.

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

Сплоченность:

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

  

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

Сцепление:

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

  

Плотная связь - это когда группа классов сильно зависит от одной   другой. Этот сценарий возникает, когда класс предполагает слишком много   обязанностей или когда одна проблема распространяется на многие классы   а не иметь собственный класс.

Если вы использовали лучшее имя , например DELIMITER = ',', у вас все равно была бы такая же проблема, потому что имя является общим и не содержит семантики. Переназначение значения больше не помогает сделать анализ воздействия, чем поиск и замена для литерала ','. Потому что какой-то код использует его и нуждается в , и некоторых других кодах, но нуждается в ; сейчас? Все еще нужно смотреть на каждое использование вручную и изменять их.

В дикой природе:

Недавно я реорганизовал приложение 1,000,000+ LOC, которому было 18 лет. У него были такие вещи, как public static final COMMA = SPACE + "," + SPACE;. Это никоим образом не лучше, чем просто встраивание " , ", где это необходимо.

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

Он также имел , несколько разс несколькими орфографическими ошибками слова COMMA в нескольких пакетах и ​​классах. Со ссылками на все варианты, смешанные вместе в коде. Это было не что иное, как кошмар, чтобы попытаться исправить , не нарушая что-то совершенно не связанное.

То же самое с алфавитом, было несколько UPPER_CASE_A, A, UPPER_A, A_UPPER, что большая часть время было равно A, но в некоторых случаях это не так. Для почти каждого символа, но не для всех символов.

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

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

ответил Jarrod Roberson 6 J000000Wednesday16 2016, 20:53:01
141
  

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

АБСОЛЮТНО НЕ. Это вообще не причина использования констант, потому что константы не изменяются по определению . Если константа когда-либо меняет , тогда она не была константой, не так ли?

Привлекательность использования констант не имеет ничего общего с управлением изменениями, и все, что связано с , делает программы доступными для написания, понимания и поддержки людьми . Если я хочу знать всюду в своей программе, где двоеточие используется как разделитель URL-адресов, то я могу это очень легко узнать, если у меня есть дисциплина, чтобы определить константу URLSeparator, и я не могу этого легко понять, если мне нужно grep для : и получить каждое место в коде, где : используется для указания базового класса или оператора ?: или что-то еще.

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

Трюк здесь заключается не в том, чтобы избегать констант, а в том, чтобы называть их своими семантическими свойствами , а не их синтаксическими свойствами . Для чего используется константа? Не называйте его Comma, если бизнес-домен вашей программы не является типографикой, разбором английского языка и т. П. Назовите это ListSeparator или что-то подобное, чтобы сделать семантику вещи понятной.

ответил Eric Lippert 6 J000000Wednesday16 2016, 22:39:28
62

Нет, это глупо.

Что такое not , обязательно тупой тянет подобные вещи в названные ярлыки по причинам локализации. Например, разделитель тысяч представляет собой запятую в Америке (1,000,000), но not запятую в других локалях. Потянув это на именованный ярлык (с соответствующим, без запятой), программист может игнорировать /абстрагировать эти детали.

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

ответил Telastyn 6 J000000Wednesday16 2016, 20:25:28
29

Есть несколько символов, которые могут быть неоднозначными или использоваться для различных целей. Например, мы используем '-' как дефис, знак минус или даже тире. Вы можете сделать отдельные имена как:

static const wchar_t HYPHEN = '-';
static const wchar_t MINUS = '-';
static const wchar_t EM_DASH = '-';

Позже вы можете изменить свой код, чтобы устранить неоднозначность, переопределив их как:

static const wchar_t HYPHEN = '-';
static const wchar_t MINUS = '\u2122';
static const wchar_t EM_DASH = '\u2014';

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

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

ответил Adrian McCarthy 7 J000000Thursday16 2016, 01:28:43
21

Некоторые ответы кажутся похожими на то, что они хотят противоречить друг другу, как и Эрик, и тот, что Яррод. Но они находятся в идеальном согласии.

Константа должна добавить значение.

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

Если вы используете запятую для <purpose>, вы можете объявить <PURPOSE> запятой.

Таким образом, хотя city + CharacterClass.COMMA + state ужасно ошибочно, city + CITY_STATE_DELIMITER + state допустимо. Насколько это приемлемо, зависит от многих факторов, которые в настоящее время неизвестны.

Использовать функции для форматирования

Я бы предпочел Format<PurposeOfFormat>(city, state) и не хотел бы, чтобы тело этой функции выглядело так долго, как оно короткое и передавало тестовые примеры. Другими словами, если вам нужно беспокоиться об использовании констант для реализации правил форматирования, вы можете вместо этого использовать функции для правил форматирования - таким образом вопрос об использовании констант внутри этих функций становится настолько неуместным, что никто не должен заботиться.

ответил Peter 7 J000000Thursday16 2016, 12:56:21
17

Идея о том, что постоянная COMMA лучше, чем ','

Использование "," - не только плохая форма, это опасно! Когда кто-то хочет изменить разделитель от ";" до COMMA = ";", они могут пойти изменить файл констант на final String LIST_SEPARATOR = ",", потому что для них это быстрее, и это просто работает. Кроме того, вы знаете, все другие вещи, которые использовали COMMA, теперь также являются точкой с запятой, включая вещи, отправленные внешним потребителям. Таким образом, он передает все ваши тесты (потому что весь маршаллинг и код unmarshalling также использует COMMA), но внешние тесты потерпят неудачу.

Что полезно, чтобы дать им полезные имена. И да, иногда несколько констант будут иметь одинаковое содержимое, но разные имена. Например ----+:=11=:+----.

Итак, ваш вопрос: «Являются ли константы одного символа лучше, чем литералы», и ответ однозначно нет, они не являются. Но даже лучше, чем оба из них - это имя с ограниченной областью действия, которое явно указывает, какова его цель. Конечно, вы потратите несколько лишних байтов на эти дополнительные ссылки (при условии, что они не будут скомпилированы на вас, что они, вероятно, будут), но в долгосрочном обслуживании, где большая часть стоимости приложения, они стоит времени.

ответил corsiKa 6 J000000Wednesday16 2016, 23:06:36
3

Я работал над написанием лексеров и синтаксических анализаторов и использовал целые константы для представления терминалов. Односимвольные терминалы имели для ASCII-кода как их числовое значение для простоты, но код мог быть чем-то другим. Итак, у меня будет T_COMMA, которому был присвоен ASCII-код для ',' как его постоянное значение. Однако были и константы для нетерминалов, которым были присвоены целые числа над набором ASCII. От взгляда на генераторы парсеров, такие как yacc или bison, или парсеров, написанных с использованием этих инструментов, у меня сложилось впечатление, что это в основном то, как все это делали.

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

Я могу придумать еще несколько изолированных случаев, когда имеет смысл использовать константы вместо соответствующих литералов. Например, вы можете определить NEWLINE как литерал '\ n' в unix-поле, но '\ r \ n' или '\ n \ r', если вы находитесь в окнах или в блоке mac. То же самое относится к разбору файлов, которые представляют собой табличные данные; вы можете определить константы FIELDSEPARATOR и RECORDSEPARATOR. В этих случаях вы фактически определяете константу для представления символа, который выполняет определенную функцию. Тем не менее, если бы вы были программистом-новичком, возможно, вы бы назвали ваш разделитель полей COMMA, не понимая, что вы должны назвать его FIELDSEPARATOR, и к тому моменту, когда вы поняли, код будет в производстве, и вы будете на следующей проект, поэтому неверно названная константа останется в коде для кого-то, кто позже найдет и покачал головой.

Наконец, практика, которую вы описываете , может иметь смысл в нескольких случаях, когда вы пишете код для обработки данных, закодированных в определенной кодировке символов, например iso-8859-1, но ожидайте, что кодировка изменится позже. Конечно, в таком случае было бы разумнее использовать библиотеки локализации или кодирования и декодирования для его обработки, но если по какой-то причине вы не могли использовать такую ​​библиотеку для обработки проблем с кодировкой для вас, используя константы, должны переопределяться в одном файле, а не жестко закодированные литералы, замусоренные по всему исходному коду, могли бы быть в пути.

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

ответил Pascal 6 J000000Wednesday16 2016, 22:33:34
3

Однажды я видел, что такие константы, которые используются эффективно, соответствуют существующему API или документу. Я видел такие символы, как COMMA, потому что конкретная часть программного обеспечения была напрямую связана с парсером, который использовал COMMA как тег в абстрактном синтаксическом дереве. Я также видел, что он использовался для соответствия формальной спецификации. в формальных спецификациях вы иногда увидите символы, такие как COMMA, а не ',', потому что они хотят быть максимально ясными.

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

ответил Cort Ammon 7 J000000Thursday16 2016, 09:00:48
3

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

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

Я полностью согласен с DELIMITER=':' и сам по себе является плохой абстракцией и только лучше, чем COLON=':' (поскольку последний полностью обедневший).

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

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

  

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

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

ответил Erik Eidt 7 J000000Thursday16 2016, 04:26:02
1

Обратите внимание, что вы пытаетесь создать список.

Итак, реорганизуйте его как: String makeList(String[] items)

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

ответил Mehrdad 7 J000000Thursday16 2016, 20:18:23
1

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

Однако есть, по крайней мере, два случая, когда имеет смысл объявлять константы, имя которых точно описывает их содержимое, и где вы не можете изменить значение без надлежащего изменения имени константы:

  • Математические или физические константы, например. PI = 3.14159. Здесь роль константы - действовать как мнемоника, поскольку символическое имя PI намного короче и читаемо, чем значение, которое оно представляет.
  • Исчерпывающие списки символов в парсере или клавишах на клавиатуре. Возможно, имеет смысл иметь список констант с большинством или всеми символами Unicode , и это может привести к падению вашего дела. Некоторые символы, такие как A, очевидны и четко распознаются. Но можете ли вы легко рассказать А и A отдельно? Первая - кириллическая буква ì , а последняя - латинская буква A . Это разные буквы, представленные разными кодами Unicode, хотя графически они почти идентичны. Я бы предпочел иметь константы CYRILLIC_CAPITAL_A и LATIN_CAPITAL_A в моем коде, чем два почти одинаково выглядящих символа. Конечно, это бессмысленно, если вы знаете, что будете работать только с символами ASCII, которые не содержат кириллицу. Аналогично: я использую латинский алфавит изо дня в день, поэтому, если бы я писал программу, в которой нуждался китайский символ, я бы предпочел использовать константу, а не вставить символ, который я не понимаю. Для кого-то, кто использует китайские символы изо дня в день, китайский символ может быть очевиден, но латинский может быть проще представлять в качестве именованной константы. Итак, как вы видите, это зависит от контекста. Тем не менее, библиотека может содержать символические константы для всех символов, поскольку авторы не могут заранее знать, как будет использоваться библиотека, и какие символы могут нуждаться в константах для улучшения читаемости в конкретном приложении.

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

ответил Michał Kosmulski 11 J000000Monday16 2016, 01:40:55
0
  

Являются ли константы с одним символом лучше, чем литералы?

Здесь много плаваний. Позвольте мне посмотреть, могу ли я их разделить.

Константы обеспечивают:

  • Семантика
  • изменение, во время разработки
  • косвенность

Переход к одному символьному имени влияет только на семантику. Имя должно быть полезным как комментарий и ясно в контексте. Он должен выражать смысл, а не ценность. Если он может сделать все это с одним символом штрафа. Если он не может, пожалуйста, не делайте этого.

Литерал и константа могут меняться во время разработки. Это то, что вызывает проблему магического номера. Строки также могут быть магическими числами.

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

Направление может решить любую проблему, кроме как многостороннее.

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

Неправильное обращение может быть преувеличено. Некоторые предпочитают искать и заменять литералы, чтобы внести свои изменения. Это прекрасно, пока 42 явно является смыслом жизни и не смешивается вместе с 42, атомным номером молибдена.

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

ответил candied_orange 11 J000000Monday16 2016, 17:17:11
0

Как философский контрапункт к мнению большинства, я должен сказать, что есть некоторые из нас, которые ценят неискушенного французского крестьянина XIX века и

  

помнил свою однообразную, вечную ясность, его ошеломляюще разумные взгляды на все, его колоссальное удовлетворение с трюизмами только потому, что они были правдой. «Смешай все!» - вскричал Тернбулл себе: «Если он находится в убежище, не может быть никого на улице».

     

G.K. Честертон, мяч и крест

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

  

Если вы лжете компьютеру, он получит вас

     

Перри Фаррар - Джермантаун, Мэриленд (от More Programming Pearls)


Но, по большей части, я согласен с людьми, которые говорят, что это глупо. Я слишком молод, чтобы научиться программировать FORTRAN, но я слышал, что вы можете переопределить 'A' = 'Q' и придумать всевозможные замечательные криптограммы. Вы этого не делаете.

Помимо проблем i18n, возникших ранее (которые не переопределяют глиф «COMMA», но действительно переопределяют глиф DECIMAL_POINT). Построение французских цитат из моркови или британских одинарных кавычек для передачи смысла людям - это вещь, и они действительно должны быть переменными, а не константами. Константа будет AMERICAN_COMMA := ',' и запятой comma := AMERICAN_COMMA

И, если бы я использовал шаблон построителя для построения SQL-запроса, я бы скорее посмотрел

sb.append("insert into ")
 .append(table_name)
 .append(" values ")
 .append(" ( ")
 .append(val_1)
 .append(",")
 .append(val_2)
 .append(" ); ")

, чем любая другая вещь, но если вы собираетесь добавлять константы, это будет

INSERT_VALUES_START = " ( "
INSERT_VALUES_END = " ) "
INSERT_VALUES_SEPARATOR = " , "
QUERY_TERMINATOR = ";"

sb.append("insert into ")
 .append(table_name)
 .append(" values ")
 .append(INSERT_VALUES_START)
 .append(val_1)
 .append(INSERT_VALUES_SEPARATOR)
 .append(val_2)
 .append(INSERT_VALUES_END)
 .append(QUERY_TERMINATOR)

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

Ничего не собирается автозаполнять строку для вас, поэтому, если я могу получить запятую, нажав «con», alt-space, down, down, down, введите и получите цитату, нажав «con», alt-space , вниз, вниз, введите. Я мог бы просто сделать это.


Еще одна вещь, которую следует помнить о строковых литералах, - это то, как они компилируются. По крайней мере, в Delphi (который является единственным языком, который я одержим над стеком), вы завершите, что ваши литералы выскочили в стек каждой функции. Итак, много литералов = много накладных функций; «,» в функции_А - это не тот же бит памяти, что и «,» в функции_B ». Для борьбы с этим существует« строка ресурсов », которая может быть построена и привязана вбок - и так они делают вещи i18n (убийство две птицы с одним кустом). В Python все ваши строковые литералы являются объектами, и на самом деле может показаться приятным использование utils.constants.COMMA.join(["some","happy","array","strings"]), но это не звездная идея для точек, повторяющихся снова и снова на этой странице.

ответил Peter Turner 12 J000000Tuesday16 2016, 17:50:45
-1

Может быть.

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

city + '.' + state

, тогда как с помощью

city + Const.PERIOD + state

В зависимости от среды интернационализации и глобализации разница между апострофом ASCII и открытым и закрытым апострофом Windows-1252 (или двойной кавычкой ASCII и открытой и закрытой двойной кавычкой Windows-1252) может быть значительной и, как известно, сложна для визуализации просмотра кода.

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

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

ответил Justin Cave 6 J000000Wednesday16 2016, 20:53:31
-3
  

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

Для локализации.

В англоязычных странах символом, разделяющим целую и дробную части десятичного числа, является «.», который мы называем «десятичной точкой». Во многих других странах символ «,» и обычно называется эквивалентом «запятой» на локальном языке. Аналогичным образом, когда англоязычные страны используют «,» для разделения групп из трех цифр в большом количестве (например, 1 000 000 на один миллион), страны, использующие запятую в качестве десятичной точки, используют точку (1.000.000).

Итак, есть случай для создания констант DECIMAL_POINT и COMMA, если вы делаете глобализацию.

ответил Paul G 11 J000000Monday16 2016, 13:07:44

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132