- Сообщения
- 8,671
- Репутация
- 2,481
Данная функция это аналог _Iif, за исключением того, что она работает почти также (по функционалу) как тернарные операторы в других ЯП.
Использование стандартной функции _Iif имеет небольшой(?) недостаток - при проверке, выполняются функции в обеих условиях, даже если они не совпадают с проверкой в первом параметре.
Эта полезняшка помогает в какой то мере обойти этот недостаток:
Идея в том, чтобы передавать параметры значении в виде строки, а дальше уже по необходимости, выполнять нужное значение (через Execute).
P.S.
Execute замедляет работу скрипта, т.ч не используйте данный метод если скорость для вас это фактор.
Использование стандартной функции _Iif имеет небольшой(?) недостаток - при проверке, выполняются функции в обеих условиях, даже если они не совпадают с проверкой в первом параметре.
Эта полезняшка помогает в какой то мере обойти этот недостаток:
Код:
;Расширенная функция _IifEx позволяющая предотвратить выполнение условного параметра
$iTest = 1 ;0
$iTimer = TimerInit()
_IifEx($iTest = 1, 'Sleep(1500)', 'Sleep(2500)')
ConsoleWrite('TimerDiff: ' & Round(TimerDiff($iTimer) / 1000, 2) & ' sec.' & @LF)
Func _IifEx($fTest, $vTrueVal, $vFalseVal, $bExecVal = True)
Local $vVal
If $fTest Then
$vVal = $vTrueVal
Else
$vVal = $vFalseVal
EndIf
If $bExecVal Then
$vVal = Execute($vVal)
EndIf
Return $vVal
EndFunc
Идея в том, чтобы передавать параметры значении в виде строки, а дальше уже по необходимости, выполнять нужное значение (через Execute).
P.S.
Execute замедляет работу скрипта, т.ч не используйте данный метод если скорость для вас это фактор.