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

Неправильно ли использовать специальные символы в исходном коде С#, например "-"?

Недавно, используя С#, я только что объявил параметры метода с использованием латинского символа ñ, и я попытался собрать (скомпилировать) все мое решение, и он работает, поэтому я смог выполнить свою программу. Но мне любопытно узнать, если неправильно использовать специальные символы, такие как латинские символы в исходном коде, написанном на С#? Если это неправильно, почему?

Кроме того, более читаемо и универсально писать код на английском языке, есть ли другая причина не использовать специальные символы в исходном коде С#?

4b9b3361

Ответ 1

Позвольте мне разбить это на несколько вопросов.

Является ли законным в соответствии со спецификацией использование неримановых букв в идентификаторах С#, строках и т.д.?

Да, абсолютно. Любой символ, который спецификация Юникода классифицирует как письмо, является законным. Подробные сведения см. В спецификации.

Существуют ли какие-либо технические проблемы, связанные с неримальными буквами в программах на С#?

Да, их немного. Как вы, вероятно, знаете, вы можете как "статически", так и "динамически" ссылаться на код в приложении, а компилятор - это приложение. В прошлом у нас были проблемы, когда у компилятора была статически устаревшая версия алгоритма классификации Unicode, и у редактора была dyamically-linked-in текущая версия, и теперь редактор и компилятор могут не согласиться с тем, что это юридическое письмо, которое может вызвать путаницу пользователя. Тем не менее, акцентированные латинские символы, о которых вы упоминаете, были в стандарте Unicode настолько долго, что они вряд ли вызовут какие-либо проблемы.

Кроме того, многие люди по-прежнему используют старомодные редакторы; Я узнал, как программировать на WATCOM еще в конце 1980 года, и я все еще часто использую WATCOM VI в качестве моего редактора. Иногда я могу писать код быстрее, чем я могу в Visual Studio, потому что мои пальцы просто хороши в этом после 23 лет практики. (Хотя в наши дни я использую Visual Studio практически для всех.) Очевидно, что редактор, написанный в 1980 году, будет иметь проблемы с Unicode.

Существуют ли какие-либо нетехнические проблемы, связанные с не-римскими буквами в программах на С#?

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

class List<τ> : IEnumerable<τ>

или при реализации математического кода:

degrees = 180.0 * radians / π;

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

Ответ 2

Добавлен этот первый бит на основе комментария:

Это не отвечает на вопрос... OP не спрашивает, является ли это разрешено (очевидно, это так), но не так ли? Томас Левеске

Хорошо, позвольте мне обратиться к нему более прямо:

неправильно использовать специальные символы, такие как латинские символы в исходный код написан на С#? Если это неправильно, почему?

По определению спецификации, это не "неправильно" (см. ниже).

Кроме того, более разборчиво и универсально писать код на английском языке, являются есть ли другая причина не использовать специальные символы в источнике С# код?

Поскольку вы сказали "Кроме того", я не буду рассматривать темы разборчивости и "универсальности" (как это всегда подходит для вопроса StackOverflow). С другой стороны: "Есть ли другая причина не использовать специальные символы"... Так как я игнорирую первое, что вы упомянули, я должен сказать, что я не могу думать о многих. Единственное, о чем я могу думать; У нас все еще (удивительно) проблемы с некоторыми инструментами, поддерживающими Unicode сегодня (сторонние инструменты сторонних производителей, в основном) МОЖЕТ быть, что вы используете какой-то неряшливый инструмент, который не обрабатывает юникод правильно или не соответствует спецификации С# правильно - но я не встречал никого. Итак, я бы сказал, нет. (Помня, что вы конкретно сказали, что мне не нужно обращаться к темам разборчивости или универсальности).


Из С# ECMA Specification Страница 70: ​​

Правила для идентификаторов, приведенные в этом подпункте, точно соответствуют правилам, рекомендованным Стандартным Приложением 15 Юникода, за исключением это подчеркивание разрешено в качестве начального символа (как и традиционное на языке программирования C), разрешающая последовательность Unicode разрешена в идентификаторах, а символ "@" разрешен как префикс для включения ключевые слова, которые будут использоваться в качестве идентификаторов.

identifier:: 
    available-identifier
    @ identifier-or-keyword

available-identifier::
    An identifier-or-keyword that is not a keyword

identifier-or-keyword::
    identifier-start-character 
    identifier-part-charactersopt

identifier-start-character:: 
    letter-character
    _ (the underscore character U+005F)

identifier-part-characters::
    identifier-part-character
    identifier-part-characters
    identifier-part-character

identifier-part-character:: 
    letter-character
    decimal-digit-character 
    connecting-character 
    combining-character 
    formatting-character

letter-character::
    A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nl
    A unicode-escape-sequence representing a character of classes Lu, Ll, Lt, Lm, Lo, or Nl

Важным битом является то, что спецификация определила a letter-character as.

Он включает в себя: A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nl

Символ, который вы упоминаете (- ссылка на юникод) относится к категории "Lu" (Letter, Uppercase), который специально определен спецификацией в идентификаторе.

Ответ 3

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

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

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

Ответ 4

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

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

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

Конечно, это личное предпочтение.

Ответ 5

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