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.
|