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

Какова цель чувствительности к регистру на языках?

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

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

Мой мозг гороха не может понять любую возможную причину, почему это полезно.

Но я уверен, что есть один. И прежде, чем кто-либо скажет, что переменная с именем dog и dog, дифференцированная по чувствительности к регистру, действительно очень плохая практика, верно?

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

4b9b3361

Ответ 1

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

private readonly string name;
public string Name { get { return name; } }

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

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

Ответ 2

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

Form form = new Form();

Если вы не можете этого сделать, вы получите переменные с именем myForm или form1 или f, которые не так чисты и понятны, как простой старый form.

Чувствительность к регистру также означает, что у вас нет ссылок на form, form и form, которые означают одно и то же. Мне трудно читать такой код. Мне гораздо проще сканировать код, где все ссылки на одну и ту же переменную выглядят точно так же.

Ответ 3

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

Я нашел следующий интересный пример М. Сандина в связанном обсуждении:

Я использовал считают, что чувствительность к регистру была ошибка, пока я не сделал это в случае нечувствительный язык PL/SQL (синтаксис теперь забыто):

function IsValidUserLogin(user:string, password :string):bool begin
   result = select * from USERS
            where USER_NAME=user and PASSWORD=password;
   return not is_empty(result);
end

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

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

Ответ 4

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

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

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

Если вы чувствительны к регистру, вы просто игнорируете все это; это просто проще. (Имейте в виду, что вы все равно должны обратить внимание на формы нормализации UNICODE, но это другая история, и она применяет любые правила поведения, которые вы используете.)

Ответ 5

Представьте, что у вас есть объект с именем dog, который имеет метод под названием Bark(). Также вы определили класс Dog, который имеет статический метод Bark(). Вы пишете dog.Bark(). Так что он собирается делать? Вызвать метод объекта или статический метод из класса? (на языке, где :: не существует)

Ответ 6

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

И теперь, конечно, языки любят быть совместимыми друг с другом (например, VB не может различать классы С# или функции, которые отличаются только в случае), люди используются для обозначения вещей одним и тем же текстом, но с разными случаями (См. Ответ Джона Скита - я делаю это много), и ценность бездисковых языков не была действительно достаточной, чтобы перевесить эти два.

Ответ 7

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

C использует чувствительность к регистру в индексах, но с точки зрения дизайна языка, который был странным выбором. Большинство языков, которые были разработаны с нуля (без учета того, что они были "похожими на C" каким-либо образом) были сделаны без учета регистра. Сюда входят Fortran, Cobol, Lisp и почти все языки Algol (Pascal, Modula-2, Oberon, Ada и т.д.)

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

Ответ 8

Сравнение с регистрами (с наивной точки зрения, которое игнорирует каноническую эквивалентность) тривиально (просто сравнить кодовые точки), но нечувствительное к регистру сравнение не является четко определенным и чрезвычайно сложным во всех случаях, а правила невозможны запомнить. Реализация возможна, но непреднамеренно приведет к неожиданному и неожиданному поведению. BTW, некоторые языки, такие как Fortran и Basic, всегда были нечувствительны к регистру.