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

MessageBox, который вы видите, исходит из вашего собственного кода в вашей функции onAbort!

Тот факт, что вы делаете

!define MUI_PAGE_CUSTOMFUNCTION_SHOW AbruptShow
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE AbruptLeave

, показывает, что вы не понять, как работают пользовательские страницы.

Чтобы ваша специальная страница прерывания завершилась без дальнейших действий, вам просто ничего не нужно делать в функции onAbort, когда вы находитесь на этой странице:

Var PageId
var IsOnAbruptPage
!define MUI_CUSTOMFUNCTION_ABORT onAbort
!include "MUI2.nsh"
!include LogicLib.nsh
Name "MyApp"

#OutFile "MyApp.exe"
InstallDir "$temp\MyApp"
#RequestExecutionLevel admin
OutFile Test.exe
RequestExecutionLevel user


;--------------------------------
Page Custom MyInfoPage
!define MUI_PAGE_CUSTOMFUNCTION_SHOW WelShow
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_SHOW MyLicenseShowCallback
!insertmacro MUI_PAGE_LICENSE "${__FILE__}"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW MyDirectoryShowCallback
!insertmacro MUI_PAGE_DIRECTORY
Page Custom MyAbruptPage 
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
;--------------------------------
!insertmacro MUI_LANGUAGE "English" 

Function MyDirectoryShowCallback
StrCpy $PageId 3
GetDlgItem [111] $hwndparent 1 ; 
SendMessage [111] ${WM_SETTEXT} 0 `STR:$(^NextBtn)`
FunctionEnd

Function MyLicenseShowCallback
StrCpy $PageId 2
FunctionEnd

Function WelShow
StrCpy $PageId 1
GetDlgItem [111] $HWNDPARENT 3
ShowWindow [111] 0 
FunctionEnd


Function MyInfoPage
${IfThen} $PageId == "" ${|} Abort ${|}
StrCpy $PageId 0
GetDlgItem [111] $HWNDPARENT 1
ShowWindow [111] 0 
GetDlgItem [111] $HWNDPARENT 2
${NSD_SetText} [111] "Finish"
nsDialogs::Create 1044
Pop [111]
${NSD_CreateLabel} 120u 10u 195u 28u "Setup Wizard was interrupted"
Pop [111]
nsDialogs::Show
FunctionEnd

Function onAbort
${If} $IsOnAbruptPage <> 0 ; If on aborted page
    Return                 ; allow simple exit
${EndIf}
${If} $PageId <> 0
    ${If} ${Cmd} ` MessageBox MB_YESNO "Are you sure you want to CANCEL" IDYES `
        SendMessage $HWNDPARENT 0x408 -$PageId ""
    ${EndIf}
    Abort
${EndIf}
FunctionEnd

Function GoToAbruptPage
StrCpy $IsOnAbruptPage 1
SendMessage $HWNDPARENT 0x408 -1 ""
Abort
FunctionEnd

Function MyAbruptPage
${IfThen} $IsOnAbruptPage == "" ${|} Abort ${|}
GetDlgItem [111] $HWNDPARENT 1
ShowWindow [111] 0 
GetDlgItem [111] $HWNDPARENT 3
ShowWindow [111] 0 
GetDlgItem [111] $HWNDPARENT 2
${NSD_SetText} [111] "Finish"
nsDialogs::Create 1044
Pop [111]
${NSD_CreateLabel} 120u 10u 195u 20u "Setup Wizard ended prematurely"
Pop [111]
${NSD_CreateLabel} 120u 120u 195u 20u "Setup Wizard ended prematurely"
Pop [111]
nsDialogs::Show
FunctionEnd

;--------------------------------
Section "$(^Name) (required)"
SectionIn RO
SetOutPath $INSTDIR

MessageBox MB_OK|MB_ICONEXCLAMATION "There is an installation failure. Aborting the installation process" IDOK
Call GoToAbruptPage
SectionEnd
45
задан 6 revs, 5 users 67% 5 November 2018 в 02:58
поделиться

24 ответа

Unix.

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

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

Уведомление, как нечувствительность к регистру действительно не стала чем-то полезным, пока вещи как Visual Basic не пришли - после того как компании начали инвестироваться в понятие, что получение масс к программе было хорошей вещью для их нижней строки (т.е. Microsoft делает больше денег, если существует больше программ в Windows), сделал языки, начинают быть более дружественным и более прощающим.

59
ответ дан 3 revs, 3 users 63% 26 November 2019 в 20:44
поделиться

Поскольку многие люди находят employeeSocailSecurityNumber столь же читаемым как employee_social_security_number, и это короче.

1
ответ дан Jim C 26 November 2019 в 20:44
поделиться

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

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

0
ответ дан Sarel Botha 26 November 2019 в 20:44
поделиться

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

person
perSoN
PERSON

то, Что было бы действительно плохо, - то, если они все упомянули различные объекты в коде. Если у Вас есть человек переменных, человек и ЧЕЛОВЕК все обращение к разным вещам, у Вас есть проблема.

2
ответ дан Rudd Zwolinski 26 November 2019 в 20:44
поделиться

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

Foo.Bar  
foo.Bar  
fOO.bAR  

На нечувствительном к регистру языке, который может быть зафиксирован автоматически редактором легко. На чувствительном к регистру языке, устраняющем его, он более тверд, поскольку это может быть законно. Редактор сначала должен высидеть если нечто. Панель и fOO.bAR существуют и также должны предположить, что Вы ввели с неправильным случаем вместо того, чтобы забыть объявлять переменную (поскольку Foo отличается от НЕЧТО).

3
ответ дан 2 revs 26 November 2019 в 20:44
поделиться

От Руководства Разработчика инфраструктуры.NET Конвенции Капитализации , Чувствительность к регистру:

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

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

4
ответ дан Tom A 26 November 2019 в 20:44
поделиться

ExpertSexChange

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

Это - серьезное основание для языков, являющихся чувствительным к регистру. Меньше неоднозначности! Неоднозначность программистам считают yucky.

13
ответ дан 2 revs, 2 users 80% 26 November 2019 в 20:44
поделиться

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

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

4
ответ дан Ken 26 November 2019 в 20:44
поделиться

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

(Franz Lisp однажды представлял то, что они назвали "современной" капитализацией, в которой Слушатель не свернет случаи и ключевые слова CL, был бы в нижнем регистре. Я никогда не следовал за ним достаточно хорошо для знания то, что произошло там.)

4
ответ дан David Thornley 26 November 2019 в 20:44
поделиться

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

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

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

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

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

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

7
ответ дан grunties 26 November 2019 в 20:44
поделиться

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

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

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

IAmNowHere

от

IAmNowhere

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

8
ответ дан joel.neely 26 November 2019 в 20:44
поделиться

Какова прописная форма я ? я (U+0049) или İ (U+0130)?

Капитализация является зависимым локали.

9
ответ дан McDowell 26 November 2019 в 20:44
поделиться

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

Person person = new Person("Bill");

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

кроме того, имея Человека, человека, PersoN, PeRsOn и ЧЕЛОВЕКА, все быть эквивалентными маркерами дали бы мне головную боль. :)

11
ответ дан Bill the Lizard 26 November 2019 в 20:44
поделиться

Как Вы вопите, если у Вас НЕТ ЗАГЛАВНЫХ БУКВ?! А-А-А!

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

4
ответ дан 2 revs, 2 users 57% 26 November 2019 в 20:44
поделиться

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

, После того как идентификаторы вошли к существованию, которые были только уникальны через их случай, стало очень трудным возвратиться. Многие разработчики любили его и там, кажется, не большое требование отменить его.

16
ответ дан 2 revs, 2 users 86% 26 November 2019 в 20:44
поделиться

Сворачивание случая только просто на английском языке (и для всех символов < 128). У немца sz или "резкий s" (Гџ) нет прописного варианта в наборе символов ISO 8859-1. Это только получило один в Unicode после приблизительно с 111 десятилетиями из обсуждения (и теперь, все шрифты должны быть обновлены...). Kanji и Hiragana (японские алфавиты) даже не знают нижний регистр.

Для предотвращения этой путаницы, даже в этом возрасте Unicode, не мудро позволить случай, сворачивающийся и unicode идентификаторы.

24
ответ дан Aaron Digulla 26 November 2019 в 20:44
поделиться

Мое предположение было бы то, что чувствительность к регистру увеличивает пространство имен. Хороший прием такой как

MyClass myClass;

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

25
ответ дан user3458 26 November 2019 в 20:44
поделиться

Это на самом деле чрезвычайно практично, и для разработчика и для спецификации синтаксиса языка: более низкое различие / прописное различие добавляют много выразительности к именованию идентификатора.

С точки зрения синтаксиса языка, можно вынудить определенные идентификаторы запуститься с нижнего регистра или верхнего регистра (например, имя класса Java). Это делает парсинг легче, и следовательно помогает содержанию в чистоте синтаксиса.

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

29
ответ дан 2 revs, 2 users 73% 26 November 2019 в 20:44
поделиться

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

существует большая разница (где я живу, так или иначе, около города Чтения) между:

мне нравится читать.

и

мне нравится Читать.

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

Одно явное преимущество чувствительности к регистру для языков программирования - то, что текст становится культурно нечувствительным также. Это должно плохо достаточно иногда обстоятельно объяснять к компилятору, который текстовое кодирование используется для исходного файла - имеющий необходимость указать, который культура , в котором это находится, была бы еще хуже :(

35
ответ дан 2 revs, 2 users 96% 26 November 2019 в 20:44
поделиться

Я не думаю, что Вы получите лучший ответ, чем, "потому что автор (авторы) того языка думал, что это было лучше тот путь". Лично, я думаю, что они правы. Я не хотел бы найти эти строки где угодно в том же исходном файле (и относиться к тому же object+method)...

SomeObject.SomeMethod();
...
SOMEOBJECT.SOMEMETHOD();
...
someObject.someMethod();
...
sOmEoBjEcT.sOmEmEtHoD();

я не думаю, что любой был бы рад видеть это...

66
ответ дан 3 revs, 2 users 95% 26 November 2019 в 20:44
поделиться

И вы также можете (по глупости) просто использовать одинарные буквы («a», «b» и «c») для всех классов, переменных, функций и методов.

Но ПОЧЕМУ вы хотите?

Использовать имена, которые имеют смысл , а не:

function a(a)
{
    int a = a.a;
    return a
}
1
ответ дан 26 November 2019 в 20:44
поделиться

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

Const SHOESIZE = 9

Class ShoeSize

ShoeSize.shoesize = SHOESIZE

call shoeSize(ShoeSize);

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

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

1
ответ дан 26 November 2019 в 20:44
поделиться

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

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
ответ дан 26 November 2019 в 20:44
поделиться

MyClass myClass; было бы невозможно с учетом регистра без учета регистра.

Или вы могли бы быть умным и фактически использовать 2 разных слова ... которые лучше показывают, что вы на самом деле пытаетесь сделать, например:

MyClass myCarDesign;

Дух.

-1
ответ дан 26 November 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: