В чем преимущество чувствительности к регистру в программном языке?

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

Мой первый опыт программирования в семействе Basic (MSX Basix, Q-basic, VB). Все они не чувствительны к регистру. Возможно, это из-за этих первых опытов, но я никогда не осознавал преимущества чувствительности к регистру в языке. Напротив, я думаю, что это источник ненужных накладных расходов и ошибок, и это все еще раздражает меня, когда я использую, например, Java или C.

Я только что прочитал о Clojure (диалекте Лиспа) и, к своему удивлению, заметил, что одно из отличий от Лиспа - это чувствительность к регистру.

Итак: в чем собственно польза (для программиста) от языка, чувствительного к регистру?

Я могу думать только о следующем:

  • удвоить количество символов
  • визуальная обратная связь и более легкое чтение сложных переменных с использованием таких методов, как CamelCase, например HopCount

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

Второй аргумент также неверен, поскольку приличная среда IDE может обеспечить это и другим способом. Хорошим примером является VBA IDE, у которой есть очень хороший подход: язык нечувствителен к регистру, но как только вы вводите переменную, она меняет ее на регистр, используемый в ее определении. Например, если вы определили Dim thisIsMyVariable as string, он заменит любое вхождение thisismyvariable на thisIsMyVariable). Это дает программисту немедленную подсказку о том, что переменная на самом деле была введена правильно (потому что она изменила внешний вид).

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


person Rabarberski    schedule 04.03.2011    source источник
comment
Технически это не удвоение количества символов. Предполагая, что максимальная длина символа составляет 32 символа, без учета регистра может быть что-то вроде 38 символов (a-z0-9_$) с 38 ^ 32 = 3.57e+50 перестановками. Добавляя еще 26 символов с учетом регистра, мы получаем 64 ^ 32 = 6.28e+57 перестановок, что примерно в 1.76e+7 раз больше символов, а не просто в два раза больше символов. Не то чтобы это важно.   -  person Delan Azabani    schedule 04.03.2011
comment
Считаю читабельность главным. Также заставляет компилятор делать немного меньше работы. Считайте String string = new String();   -  person Melv    schedule 04.03.2011
comment
Да, как бы то ни было, я полностью согласен с тем, что чувствительность к регистру используется в интересах компьютера, а не программиста. К сожалению, это кажется субъективным / аргументированным вопросом, на который нет четко определенного ответа. Таким образом, я не думаю, что он подходит для Stack Overflow. Я действительно не знаю, каковы правила на programmers.stackexchange.com, но я думаю, что это было бы интересное обсуждение там.   -  person Cody Gray    schedule 04.03.2011
comment
Языки чувствительны к регистру, потому что теперь они могут. Терминал VT50 имел только заглавные буквы. Старые принтеры printronix могли печатать только заглавные буквы. Но что-либо более новое, чем это, позволяет использовать оба случая.   -  person SK-logic    schedule 04.03.2011
comment
@Paul: ой, я сделал поиск с учетом регистра в поле поиска SO, но все полученные результаты не годились. Похоже, что функция поиска в SO могла бы использовать некоторые улучшения ...   -  person Rabarberski    schedule 04.03.2011


Ответы (2)


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

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

Я хотел бы думать об этом так: что мы получаем, НЕ имея чувствительности к регистру? Мы вводим двусмысленность, поощряем небрежность и небрежный стиль.

Конечно, это несколько субъективный вопрос.

person Tomas    schedule 04.03.2011

Многие соглашения об именах требуют, чтобы символы, обозначающие объекты из разных семантических классов (типы, функции, переменные), имели свои собственные правила использования регистра имен. В Java, например, имена типов всегда начинаются с буквы в верхнем регистре, а имена переменных, функций-членов и т. Д. Начинаются с буквы в нижнем регистре. Это фактически помещает имена типов в другое пространство имен и дает визуальную подсказку, что на самом деле означает оператор.

// declare and initialize a new Point
Point point=new Point();
// calls a static member function of type Point
Point.fooBar();
// calls a member function of Point
point.moveTo(x,y);
person Nordic Mainframe    schedule 04.03.2011
comment
Я собирался опубликовать очень похожий ответ. Поскольку я часто использую MainModel, mainmodel = new MainModel () {foo = 1, bar = 0}; - person SQLMason; 04.03.2011
comment
Мне не нравится обе практики использования идентификаторов, которые различаются только регистром (разрешено в C #), и использование несовместимого регистра при обращении к идентификатору (разрешено в VB.NET) . Если бы у меня были мои druthers, если бы Foo был объявлен в одной области и foo во вложенной области, тогда внутри этой вложенной области Foo не ссылался бы ни на внешнее имя, ни на внутреннее, а просто был бы запрещен. Такое правило упростило бы IDE решение любых проблем [я считаю, что C # IDE не очень полезна в этом отношении]. - person supercat; 17.09.2013