Чувствительный к регистру против нечувствительного синтаксиса - PullRequest
6 голосов
/ 22 мая 2009

Может кто-нибудь сделать действительно хороший случай (:-)) для того, чтобы быть чувствительным к регистру?

C #: чувствителен к регистру VB.NET: не с учетом регистра C ++: чувствителен к регистру ...

Хуже всего: XML, который используется внутри такого языка, как VB.NET , чувствителен к регистру.

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

Меня спрашивают снова и снова в комментариях

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

Вот пример: Я вижу это аналогично вопросу: URL должны быть чувствительны к регистру? www.cnn.com <> Www.cNN.com? Конечно они должны быть одинаковыми, удостоверение личности воровство небес! потому что люди не уделяют столько внимания двум одинаковым струнам, но в противном случае они могут иметь другой корпус. Программисты - это люди. Так что getAge () и getage () одинаковы для большинства людей.


Пожалуйста, обратите внимание: я не думаю, что мы хотим, чтобы код фактически имел функцию, определенную как getAget (), а затем имел код, вызывающий ее getage (), VS (vb.net) автоматически исправит getaget для getAge. Таким образом, код понятен, и программист осознает правильную прописную букву. Моя точка зрения такова: хорошая IDE делает проблему неактуальной, но она работает лучше на языке, не учитывающем регистр символов, таком как vb.net, и, скажем, c #. Справка: здесь

Ответы [ 7 ]

11 голосов
/ 22 мая 2009

Правила кейса зависят от культуры. Вы хотите язык программирования, в котором переменная i равна , иногда считается такой же, как переменная I, а иногда это разные переменные? (Кстати, это не выдуманный пример. На турецком языке I - это , а не в верхнем регистре i.

Честно говоря, это довольно просто. Вы хотите, чтобы компилятор исправил вас, когда вы делаете опечатку, или вы хотите, чтобы он угадал, что вы имели в виду? Последнее приводит к ошибкам, как вы узнали. В.Б. предполагает, «о, вы, вероятно, имели в виду то же самое, это нормально, мы вас не остановим», и XML воспринял вас буквально.

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

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

Foo foo; // declare a variable foo of type Foo

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

И последний момент для рассмотрения:

Дело имеет значение на реальных языках. Слово, начинающееся с верхнего регистра, отличается от того же, но с начального нижнего регистра. Слово "мир" не является правильным на английском языке. Информация закодирована в корпусе, что облегчает чтение текста. Это говорит нам, когда мы встречаем имя, например, или когда начинается предложение, что удобно. Разрешение людям игнорировать правила использования текста затрудняет чтение текста. А поскольку код, как правило, должен быть написан максимально читабельно, почему бы нам не сделать то же самое в программировании? Разрешить кейс для кодирования важной информации. Во многих языках Foo является типом, а foo является переменной. Это важная информация. Я хочу знать это, когда я программирую. Если я увижу функцию с именем «Getage», мне будет интересно, если это английское слово, которое я никогда раньше не слышал. Но когда я вижу «GetAge», я сразу понимаю, что его следует читать как слово «Get», за которым следует слово «Age».

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

4 голосов
/ 22 мая 2009

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

Что касается конкретного ответа, как насчет читабельности? Разве stoRetroData визуально ничем не отличается от storeTRodAtA? Не то чтобы кто-то делал такие вещи, но какой смысл позволять это?

Я не могу представить причину, чтобы позволить игнорировать регистр.

По крайней мере, это мое мнение, но ваш пробег может отличаться.

Редактировать: Я, вероятно, должен был начать это с заявления об отказе:

Я научился программировать по основам, и эта мысль была мимолетной примерно 18 лет назад. Поверьте мне, это одна из тех вещей, о которой вы вспомните через 20 лет и скажете: «О, да, я был совершенно неправ» (101)

2 голосов
/ 22 мая 2009

Пара причин.

  • Нахождение вещей, с учетом регистра, у меня везде должен быть флажок «без учета регистра». С UTF-8, который также должен знать о маленькой строчке клингона.

  • Более важно, CamelCasing, CAMelcaSing. Это не красиво, но это часто используется и довольно вменяемый. Почти невозможно с учетом регистра.

  • Языковая четность, например, xsd.exe (поставляется с VS200x) может генерировать классы для xsd, которые вы предоставляете. Как будет называться ваше «Значение», если у вас также есть «Значение»? Таким образом, это устраняет еще один возможный импеданс.

2 голосов
/ 22 мая 2009

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

2 голосов
/ 22 мая 2009
  1. История Так оно и было. XML является VB.NET с учетом регистра, потому что стандарт XML требует его
  2. Интернационализация Будем ли мы поддерживать кейс на всех языках (французский, японский, иврит, клингон и т. Д.)?
1 голос
/ 22 мая 2009

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

Var test = 0;
Console.writeline(test);
Test = test + 1;
Console.writeline(test);

Так красиво, ...: P

0 голосов
/ 22 мая 2009

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

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

...