Почему многие языки чувствительны к регистру? - PullRequest
45 голосов
/ 02 февраля 2009

Почему многие языки чувствительны к регистру?

Это просто вопрос наследования? C ++ чувствителен к регистру, потому что C есть, Java чувствителен к регистру, потому что C ++ и т.д. Или за этим стоит более прагматичная причина?

Ответы [ 31 ]

8 голосов
/ 02 февраля 2009

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

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

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

IAmNowHere

от

IAmNowhere

( Это шутка! ; -)

7 голосов
/ 02 февраля 2009

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

Когда FOOBAR = FooBar = foobar, вы можете выбрать свое соглашение, и другие кодировщики могут сделать то же самое независимо от того, разделяют они ваши предпочтения или нет . Нет путаницы.

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

Вы называете переменную WebSite, они называют их Website, и какая система запутывается? При сканировании тоже не легко поймать.

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

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

4 голосов
/ 02 февраля 2009

Как вы кричите, если у вас нет шапки ?! AHHH!

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

4 голосов
/ 14 февраля 2009

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

Существуют правила использования заглавных букв исключительно для облегчения идентификации читать и распознавать. Корпус не может быть используется как средство избежать имени столкновения между элементами библиотеки.

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

4 голосов
/ 02 февраля 2009

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

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

4 голосов
/ 02 февраля 2009

Существует также Common Lisp, который является регистрозависимым языком, который многие ошибочно считают нечувствительным к регистру. Когда вы вводите (car x) в Listener, он превращается в (CAR X) для обработки. Можно определить символы с именами в нижнем регистре, но они должны быть заключены в кавычки с чем-то вроде |lower-case-symbol|. Поэтому ввод (car x) или (CAR X) или (Car X) все работает одинаково.

(В какой-то момент Франц Лисп представил то, что они называли «современной» прописной буквой, в которой слушатель не будет складывать регистры, а ключевые слова CL будут в нижнем регистре. 1009 *

3 голосов
/ 02 февраля 2009

Чувствительность к регистру не очень помогает согласованности регистра.

Foo.Bar  
foo.Bar  
fOO.bAR  

В случае нечувствительного к регистру языка, который может быть легко исправлен редактором. В случае чувствительного к регистру языка исправить это сложнее, поскольку это может быть законно. Сначала редактор должен проверить, существуют ли foo.Bar и fOO.bAR, а также угадать, что вы набрали неправильный регистр, вместо того, чтобы забыть объявить переменную (так как Foo отличается от fOO).

2 голосов
/ 23 декабря 2009

Каждый пример, который я видел в поддержку чувствительности к регистру, основан на желании написать плохой, неописательный код. например аргумент "дата" против "myDate" - это оба одинаково неописательные и плохая практика. Хорошей практикой является называть его так, как оно есть на самом деле: birthDate, hireDate, invoiceDate, что угодно. И кто в здравом уме захочет написать код вроде:

Public Class Person
    Public Shared ReadOnly PERSON As Person
End Class
Public Class Employee
    Public person As Person = person.PERSON
End Class

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

2 голосов
/ 02 февраля 2009

Многие люди здесь сказали, что было бы плохо, если бы несколько форм капитализации ссылались на одну и ту же вещь, например ::10000

person
perSoN
PERSON

Что было бы действительно плохо, если бы все они ссылались на разные объекты в коде. Если у вас есть переменные person, perSoN и PERSON, относящиеся к разным вещам, у вас есть проблема.

1 голос
/ 22 апреля 2009

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

Const SHOESIZE = 9

Class ShoeSize

ShoeSize.shoesize = SHOESIZE

call shoeSize(ShoeSize);

function shoeSize(SHOEsize)
{
   int ShoeSIZE = 10
   return ShoeSize
}

Duh. Вы не могли придумать лучшего имени переменной, чем «ShoeSize» для разных целей? Вы можете использовать миллиард различных слов, но вы предпочитаете просто использовать ShoeSize вместо этого?

...