Меню сайта
Опросы
Что нужно сделать быстрее?
Всего ответов: 137
Поддержать проект
Администрация
    Состояние ICQ в данный моментICQ: 368-000-200 (админ)
      Состояние в данный моментMRA: rus-open-source(админ)

2.3.5.1 Логическая структура кода

Условно-исполняемый код или код выполняющийся в цикле может быть реализован с помощью StrCmp, IntCmp, IfErrors, Goto и т.д. Однако, есть намного более простой написать его. LogicLib содержит несколько очень простых макросов, с помощью которых очень легко строить сложные логические структуры. Its syntax, explained in LogicLib.nsh, is similar to other programming languages and can prove to be simpler for beginners and advanced users alike.

Для примера, проверка значения переменной без LogicLib выглядит примерно так:

Code
StrCmp $0 'какое-то значение' 0 +3
  MessageBox MB_OK '$$0 это какое-то значение'
  Goto done
StrCmp $0 'какое-то другое значение' 0 +3
  MessageBox MB_OK '$$0 это какое-то другое значение'
  Goto done
# else
  MessageBox MB_OK '$$0 это "$0"'
done:

Однако, с LogicLib, код становится более читаемым и более простым для понимания, что Вы можете заметить в следующем примере:

Code
${If} $0 == 'какое-то значение'
  MessageBox MB_OK '$$0 это какое-то значение'
${ElseIf} $0 == 'какое-то другое значение'
  MessageBox MB_OK '$$0 это какое-то другое значение'
${Else}
  MessageBox MB_OK '$$0 это "$0"'
${EndIf}

The same can also be done using a switch, as shown in the following example.

Code
${Switch} $0
  ${Case} 'какое-то значение'
  MessageBox MB_OK '$$0 это какое-то значение'
  ${Break}
  ${Case} 'другое значение'
  MessageBox MB_OK '$$0 это какое-то другое значение'
  ${Break}
  ${Default}
  MessageBox MB_OK '$$0 это "$0"'
  ${Break}
${EndSwitch}

Множественные условия так же поддерживаются. Следующий пример уведомит пользователя, если значения переменных $0 и $1 будут пустыми:

Code
${If} $0 == ''
${AndIf} $1 == ''
  MessageBox MB_OK|MB_ICONSTOP 'Обе переменные пусты!'
${EndIf}

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

It also simplifies looping, by supporting the common while, do and for loops. All of the following examples count to five using the LogicLib.

Code
StrCpy $R1 0
${While} $R1 < 5
  IntOp $R1 $R1 + 1
  DetailPrint $R1
${EndWhile}
Code
${For} $R1 1 5
  DetailPrint $R1
${Next}
Code
StrCpy $R1 0
${Do}
  IntOp $R1 $R1 + 1
  DetailPrint $R1
${LoopUntil} $R1 >= 5

Чтобы использовать LogicLib, разместите следующую строку в верхнюю часть скрипта.

Code
!include LogicLib.nsh

Другие примеры Вы сможете найти в LogicLib.nsi.



Ваш профиль
Здравствуйте, Гость!
У Вас пока нет аватара, т.к. Вы либо не зарегистрированы либо не авторизованы
Гость, мы рады Вас видеть! Пожалуйста, зарегистрируйтесь или авторизуйтесь!
Друзья сайта
Система Orphus
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0



Нас считают:
Яндекс цитированияРейтинг@Mail.ru
 
 
© Copyright 2024 NSIS по-русски
Все права на материалы, находящиеся на сайте nsis.ucoz.ru, охраняются в соответствии с законодательством РФ, в том числе, об авторском праве и смежных правах. Перепечатка материалов допускается только по письменному согласованию с правообладателями контента. При любом использовании материалов сайта, гиперссылка обязательна.
Внимание! Редакция сайта не несет ответственности за содержание интернет-ресурсов, на которые есть ссылки на этом сайте.