Почему людям нравится чувствительность к регистру? [закрытый]
просто интересно, почему людям нравится чувствительность к регистру на языке программирования? Я не пытаюсь начать войну пламени, просто любопытно, вот и все.
Лично мне это никогда не нравилось, потому что я нахожу, что моя производительность снижается, когда я когда-либо пробовал язык с чувствительностью к регистру, имейте в виду, что я медленно разогреваюсь/привыкаю к нему теперь, когда я использую C# и F# намного больше, чем раньше.
Так почему же вам это нравится?
Ура
25 ответов
последовательности. Код сложнее читать, если "foo", "Foo", "fOO" и "fOo" считаются идентичными.
НЕКОТОРЫЕ ЛЮДИ БУДУТ ПИСАТЬ ВСЕ ЗАГЛАВНЫМИ БУКВАМИ, ДЕЛАЯ ВСЕ МЕНЕЕ ЧИТАЕМЫМ.
чувствительность к регистру позволяет легко использовать "одно и то же имя" по-разному, в соответствии с соглашением о капитализации, например,
Foo foo = ... // "Foo" is a type, "foo" is a variable with that type
преимущество VB.NET это то, что, хотя это не чувствительно к регистру, IDE автоматически переформатирует все в "официальный" случай для идентификатора, который вы используете , поэтому легко быть последовательным, легко читать.
недостатком является то, что я ненавижу синтаксис VB-стиля и предпочитаю операторы C-стиля, пунктуацию и синтаксис.
В C# я нахожу, что я всегда нажимаю Ctrl-Space, чтобы сохранить необходимость использовать правильный тип.
просто потому, что вы можете назвать вещи, которые только различаются по случаю не означает, что это хорошая идея, потому что это может привести к недоразумениям, если многое из этого просачивается в большие области, поэтому я рекомендую очистить его от него на уровне приложения или подсистемы, но позволяя ему только внутренне к функции или методу или классу.
чувствительность к регистру не обеспечивает стили кодирования или согласованность. Если вы Pascal case константа, компилятор не будет жаловаться. Это просто заставит вас вводить его в Pascal case каждый раз, когда вы его используете. Я лично нахожу раздражающим пытаться различать два предмета,которые различаются только в случае. Это легко сделать в коротком блоке кода, но очень трудно держать прямо в очень большом блоке кода. Также обратите внимание, что только так люди могут использовать case чувствительность без орехов - это если все они жестко следуют одним и тем же соглашениям об именах. Это соглашение об именах, которое добавило значение, а не чувствительность к регистру.
Я поддерживаю внутренний компилятор для своей компании и испытываю соблазн сделать его гибридом - вы можете использовать любой случай, который хотите для идентификатора, и вы должны ссылаться на него с тем же корпусом, но называя что-то другое с тем же именем и другим случаем, вызовет ошибку.
Dim abc = 1 Dim y = Abc - 1 ' error, case doesn't match "abc" Dim ABC = False ' error, can't redeclare variable "abc"
в настоящее время он нечувствителен к регистру, поэтому я мог бы исправить несколько существующих ошибок, и никто не будет жаловаться слишком много...
многие люди, которые любят case -чувствительность неправильно понять, какой случай -на "чувствительность".
VB .NET не учитывает регистр. Это не означает, что вы можете объявить переменную как abc, а затем ссылаться на нее как ABC, Abc и aBc. Это означает, что если вы введете его как любой из этих других, IDE автоматически изменит его на правильную форму.
нечувствительность к регистру означает, что вы можете ввести
dim a as string
и VS будет автоматически измените его на правильно-cased
Dim a As String
на практике это означает, что вам почти никогда не нужно нажимать клавишу Shift, потому что вы можете ввести все строчные буквы и позволить IDE исправить для вас.
но C# не так плохо об этом, как раньше. Intellisense в C# намного агрессивнее, чем в 2002 и 2003 годах, так что количество нажатий клавиш падает совсем немного.
Я считаю, что он обеспечивает согласованность, что улучшает читаемость кода и позволяет вашему глазу лучше анализировать фрагменты.
class Doohickey {
public void doSomethingWith(string things) {
print(things);
}
}
использование соглашений о кожухе делает этот код очень стандартизированным для любого программиста. Вы можете легко выбрать классы, типы, методы. Было бы гораздо труднее сделать, если бы кто-нибудь мог каким-либо образом капитализировать его:
Class DOOHICKEY {
Public Void dosomethingwith(string Things) {
Print(things);
}
}
не сказать, что люди будут писать уродливый код, но многое в том, как правила капитализации и пунктуации делают написание легче читать, чувствительность к регистру или стандарты корпуса делают код легче читать.
Я считаю важным, чтобы вы поняли разницу между тем, что такое чувствительность к регистру и что такое читаемость, чтобы правильно ответить на это. Хотя полезно иметь разные стратегии оболочки,вы можете иметь их в языке, который не чувствителен к регистру.
например, foo можно использовать для переменной и FOO как константу как в java, так и в VB. Существует небольшая разница, что VB позволит вам ввести fOo позже, но это в основном вопрос читаемости и надеюсь, это исправлено какой-то формой завершения кода.
Что может быть очень полезно, когда вы хотите иметь экземпляры объектов. Если вы используете согласованное соглашение об именах, очень легко увидеть, откуда берутся ваши объекты.
например: FooBar fooBar = новый FooBar ();
когда требуется только один объект типа, читаемость значительно увеличивается, поскольку сразу видно, что такое объект. Когда требуется несколько экземпляров, очевидно, вам придется выбирать новые (надеюсь, значимые имена), но в небольших разделах кода имеет смысл использовать имя класса с строчным первым символом, а не систему, такую как myFooBar, x или какое-то другое произвольное значение, которое вы забудете, что оно делает.
конечно, все это вопрос контекста, однако в этом контексте я бы сказал, что 9 раз из 10 это окупается.
здесь много ответов, но я удивлен, что никто не указал на очевидный пример, который также высмеивает конкурента stackoverflow:
expertSexChange != expertsExchange
Case очень важен, когда вы используете имена переменных case camel.
Это дает вам больше возможностей.
Белл колокол Белл!--1-->
все разные.
кроме того, это приводит новичков, которые были просто наняты орехи, пытаясь выяснить, почему итоги не выходят правильно; o)))
потому что теперь вам действительно нужно вводить все последовательно. И вдруг все начинает обретать смысл.
Если у вас есть приличный Редактор - тот, который имеет IntelliSense или то же самое под другим именем - у вас не должно быть никаких проблем с определением чувствительных к регистру имен.
чувствительность к регистру-это безумие! Какой безумный кодер будет использовать переменные с именами foo, foO, fOo и fOO в одной области? Вы никогда не убедите меня, что есть причина для чувствительности к случаю!
Я думаю,что здесь также есть проблема психологии. Мы программисты, мы четко различаем вещи. "a" - это не то же значение ASCII, что и "A", и я чувствовал бы себя странно, когда мой компилятор считает их одинаковыми. Вот почему, когда я набираю
(список ' a ' b ' c)
в LISP (в REPL), и он отвечает с
(A B C)
мой разум немедленно восклицает: "Это не то, что я сказал!'. Когда вещи не те же самые, они are разные и должны считаться таковыми...
Я обычно провожу некоторое время с программированием Delphi в отпуске, а большую часть другого времени я использую только C++ и MASM. И одна вещь странная: когда я на Delphi, мне не нравится чувствительность к регистру, но когда я на C++ - я делаю. Мне нравится чувствительность к регистру, потому что он делает похожие слова (функции, переменные) похожими, и мне нравится чувствительность без регистра, потому что он не накладывает чрезмерных ограничений на синтаксис.
от Руководство разработчика .NET Framework Соглашения О Капитализации, Чувствительность К Регистру:
существуют рекомендации по капитализации исключительно для облегчения читайте и узнавайте. Кожух не может быть используется как средство избегания имени столкновения между элементами библиотеки.
Не думайте, что все Программирование языки чувствительны к регистру. Они не. Имена не отличались по делу один.
Это полезно для различения типов в коде.
например в Java: Если он начинается с заглавной буквы, то это, вероятно, класс. если его ALL_CAPS его, вероятно, константа.
Это дает больше гибкости.
похоже на более профессиональный способ кодирования. Не нужно, чтобы компилятор понял, что вы имели в виду.
Я чувствовал то же самое, что и вы давно, когда я использовал VB3/4 намного больше. Сейчас я работаю в основном на C#. Но теперь я нахожу, что IDE отлично справляется с поиском символов и дает хороший intellisense в разных случаях. Это также дает мне большую гибкость в моем собственном коде, поскольку я могу иметь различное значение для элементов с разными случаями,что я делаю сейчас.
также хорошая привычка, если ваша работа в Linux, где ссылки на имена файлов чувствительны к регистру. Мне пришлось портировать приложение Windows ColdFusion для работы в Linux, и это был полный кошмар. Также в некоторых базах данных включена чувствительность к регистру, представьте себе радость.
Это хорошая привычка, хотя независимо от платформы и, безусловно, приводит к более последовательному стилю разработки.
ИМХО это полностью вопрос привычки. Тот, к которому вы привыкли, будет казаться естественным и правильным.
вы можете придумать множество оправданий, почему это хорошо или плохо, но ни один из них не выдерживает. Например:
- вы получаете больше возможных идентификаторов, например.
foo
vsFoo
vsFOO
. - но иметь идентификаторы, которые отличаются только в случае, не является хорошей идеей
- вы можете кодировать type-info В имя (например.
FooBar
=typename,fooBar
=функция,foo_bar
=переменная,FOO_BAR
=макро) - но вы можете сделать это в любом случае с венгерской нотации
в прогамминге есть что сказать о чувствительности к регистру, например, наличие публичной собственности Foo и соответствующего частного/защищенного поля foo. С IntelliSense не очень сложно не делать ошибок.
однако в ОС, чувствительность к регистру-это просто безумие. Я действительно не хочу иметь файл Foo и фу и fOO в том же каталоге. Это сводит меня с ума каждый раз, когда я делаю *nix вещи.
для меня чувствительность к регистру-это просто игра в таких областях, как thisValue для аргумента и ThisValue для публичного свойства или функции.
чаще всего вам нужно использовать одно и то же имя переменной (поскольку оно представляет одно и то же) в разных областях, и чувствительность к регистру помогает вам делать это, не прибегая к префиксам.
Ух, по крайней мере, мы больше не используем венгерскую нотацию.
после многолетней работы с устаревшим кодом VBScript ASP, когда мы перешли на .NET, мы выбрали C#, и одной из основных причин была чувствительность к регистру. Старый код был нечитаемым, потому что люди не следовали никакому соглашению: код был нечитаемым беспорядком (ну, бедные идентификаторы VBScript помогли в этом).
В C# мы можем определить соглашения об именах, и все должны следовать им. Если что-то неправильно cased, вы можете переименовать его (с рефакторингом, но это функция IDE) и там не будет никаких проблем, потому что класс или переменная будут называться одинаково по всему коду.
наконец, я думаю, гораздо более читабельным, если все правильно cased. Возможно, быстрее писать без учета регистра, но с точки зрения просмотра и поддержания кода это не самое лучшее, потому что пропускать код в поисках чего-то проще. Например, легче найти все строки " foo "с первого взгляда, чем искать "foo", "Foo", "FOO", "FOo"...
регистронезависимые языки не легко обобщить в кодировке ASCII. Правильное преобразование регистра для языка, отличного от английского, не является простой задачей и зависит, среди прочего, от локали системы.
нечувствительность к регистру очень сложна, если вы не ограничиваете синтаксис ascii (или только применяете нечувствительность к регистру к символам ascii), а также вам нужно ограничить локаль.
правила для определения верхнего и нижнего регистра символов не определены, и не без потерь.
некоторые символы могут иметь более одной формы в нижнем регистре. Некоторые люди не согласятся с тем, какой должна быть правильная заглавная форма.
(некоторые языки и среды, позволяют почти символ, который будет использоваться в именах)
считают в C# в чем разница между ToUpper() и ToUpperInvariant()?