---Zak---
Скриптер
- Сообщения
- 455
- Репутация
- 120
Добрый день всем.
Сидел тут и думал...думал... а потом БАХ :idea: !!! И начал думать уже о другом, а точнее задался вопросом каким способом оптимальнее всего проверять возвращение результатов различных функций AutoIT :IL_AutoIt_1: - пусть уже стандартных.
В общем подробнее будет на примерах:
Допустим мы используем команду
По справке у нас возвращает:
Вот три варианта, которые мне пришли в голову:
В "консоли" мы получи следующее:
ЗЫ: где выделенно зеленым цветом - на мой взгляд я считаю верным ответом на условие.
ЗЫЫ: в данном примере все условия буду работать правильно, т.к. "Failure" вернет 0 и "установит" @error.
В случае, если мы указали на запуск НЕ верный файлы (файла такого нет)
Теперь предлагаю посмотреть на следующий пример:
ЗЫ: notepad.exe - НЕ запущен !!!
возвращает:
3 условия на проверку:
Итог примера:
Здесь Мы с Вами видим, что @error уже НЕ "отработало", а точнее "Failure" установит исключительно свой параметр, но не "поставит ошибку". Т.е. у Нас отработало только 2 и 3 вариант проверки, в отличии от первого примера, в котором все 3 варианта проверки увенчались успехом.
И напоследок для сравнения 3 пример:
ЗЫ: но "папки" предположим такой НЕ существует !!!
Что возвращает:
Очередные 3 варианта проверки:
Итог:
Ну что я хочу скачать: исключительный случай, в котором сработал только 1 вариант - параметр в "Failure" возвращает не "0", а "-1". Оператор "IF" его можно сказать "съел", но вот @error здесь выше всех похвал.
И тут я задумался о ГЛАВНОМ: если по сути у всех функций написан разный функционал - кто-то возвращает все три параметра, у кто-то не сработывает @error, а у кого-то наоборот.
Теперь хотелось бы поинтересоваться у Вас - а каким способом Вы проверяете возвращение функций ??? Я не думаю, что каждый раз Вы лезете в справку и смотрите что должно быть в таком случае.
Сидел тут и думал...думал... а потом БАХ :idea: !!! И начал думать уже о другом, а точнее задался вопросом каким способом оптимальнее всего проверять возвращение результатов различных функций AutoIT :IL_AutoIt_1: - пусть уже стандартных.
В общем подробнее будет на примерах:
Допустим мы используем команду
Код:
Run("notepad.exe", "", @SW_HIDE)
По справке у нас возвращает:
Все здорово - но иногда даже для такой команды стоит проверить на наличии ошибки в запуске функции (допустим мы ошиблись в запуске файла и/или такого файла не существует)Return Value
Success: the PID of the process that was launched.
Failure: 0 and sets the @error flag to non-zero.
Вот три варианта, которые мне пришли в голову:
Код:
;~ ////////////////////////////////////////////////
ConsoleWrite(';~ ////////////////////////////////////////////////'&@CRLF)
ConsoleWrite(@TAB&'Run("notepad.exe", "", @SW_HIDE) === Success: the PID of the process'&@CRLF)
ConsoleWrite(';~ ////////////////////////////////////////////////'&@CRLF)
;~ ////////////////////////////////////////////////
$iPID = Run("notepad.exe", "", @SW_HIDE)
If @error Then
ConsoleWrite('If @error Then - ERROR !!!'&@CRLF)
Else
ConsoleWrite('+If @error Then - NOT error !!! - GOOD !!!'&@CRLF)
EndIf
Sleep(500)
ProcessClose("notepad.exe")
$iPID = Run("notepad.exe", "", @SW_HIDE)
If $iPID Then
ConsoleWrite('+If $iPID Then - TRUE - GOOD !!!'&@CRLF)
Else
ConsoleWrite('If $iPID Then - FALSE'&@CRLF)
EndIf
Sleep(500)
ProcessClose("notepad.exe")
If Run("notepad.exe", "", @SW_HIDE) Then
ConsoleWrite('+If Run("notepad.exe", "", @SW_SHOWMAXIMIZED) Then - TRUE - GOOD !!!'&@CRLF)
Else
ConsoleWrite('If Run("notepad.exe", "", @SW_SHOWMAXIMIZED) Then - FALSE'&@CRLF)
EndIf
Sleep(500)
ProcessClose("notepad.exe")
В "консоли" мы получи следующее:
;~ ////////////////////////////////////////////////
Run("notepad.exe", "", @SW_HIDE) === Success: the PID of the process
;~ ////////////////////////////////////////////////
+If @error Then - NOT error !!! - GOOD !!!
+If $iPID Then - TRUE - GOOD !!!
+If Run("notepad.exe", "", @SW_SHOWMAXIMIZED) Then - TRUE - GOOD !!!
ЗЫ: где выделенно зеленым цветом - на мой взгляд я считаю верным ответом на условие.
ЗЫЫ: в данном примере все условия буду работать правильно, т.к. "Failure" вернет 0 и "установит" @error.
В случае, если мы указали на запуск НЕ верный файлы (файла такого нет)
;~ ////////////////////////////////////////////////
Run("notepad1.exe", "", @SW_HIDE) === Success: the PID of the process
;~ ////////////////////////////////////////////////
If @error Then - ERROR !!!
If $iPID Then - FALSE
If Run("notepad.exe", "", @SW_SHOWMAXIMIZED) Then - FALSE
Теперь предлагаю посмотреть на следующий пример:
ЗЫ: notepad.exe - НЕ запущен !!!
Код:
ProcessExists("notepad.exe")
возвращает:
Return Value
Success: the PID of the process.
Failure: 0 if process does not exist.
3 условия на проверку:
Код:
;~ ////////////////////////////////////////////////
ConsoleWrite(';~ ////////////////////////////////////////////////'&@CRLF)
ConsoleWrite(@TAB&'ProcessExists("notepad.exe") === Success: the PID of the process. '&@CRLF)
ConsoleWrite(';~ ////////////////////////////////////////////////'&@CRLF)
;~ ////////////////////////////////////////////////
$iPID = ProcessExists("notepad.exe")
If @error Then
ConsoleWrite('+If @error Then - ERROR !!! - GOOD !!!'&@CRLF)
Else
ConsoleWrite('If @error Then - NOT error !!!'&@CRLF)
EndIf
$iPID = ProcessExists("notepad.exe")
If $iPID Then
ConsoleWrite('If $iPID Then - TRUE'&@CRLF)
Else
ConsoleWrite('+If $iPID Then - FALSE - GOOD !!!'&@CRLF)
EndIf
If ProcessExists("notepad.exe") Then
ConsoleWrite('If ProcessExists("notepad.exe") Then - TRUE'&@CRLF)
Else
ConsoleWrite('+If ProcessExists("notepad.exe") Then - FALSE - GOOD !!!'&@CRLF)
EndIf
Итог примера:
;~ ////////////////////////////////////////////////
ProcessExists("notepad.exe") === Success: the PID of the process.
;~ ////////////////////////////////////////////////
If @error Then - NOT error !!!
+If $iPID Then - FALSE - GOOD !!!
+If ProcessExists("notepad.exe") Then - FALSE - GOOD !!!
Здесь Мы с Вами видим, что @error уже НЕ "отработало", а точнее "Failure" установит исключительно свой параметр, но не "поставит ошибку". Т.е. у Нас отработало только 2 и 3 вариант проверки, в отличии от первого примера, в котором все 3 варианта проверки увенчались успехом.
И напоследок для сравнения 3 пример:
ЗЫ: но "папки" предположим такой НЕ существует !!!
Код:
DirGetSize(@ScriptDir&"QWE")
Что возвращает:
Return Value
Success: the sizes that are greater than or equal to zero
Failure: -1 and sets the @error flag to 1 if the path doesn't exist.
Очередные 3 варианта проверки:
Код:
;~ ////////////////////////////////////////////////
ConsoleWrite(';~ ////////////////////////////////////////////////'&@CRLF)
ConsoleWrite(@TAB&'DirGetSize(@ScriptDir&"QWE") === Success: the sizes that are greater than or equal to zero'&@CRLF)
ConsoleWrite(@TAB&'FileExists (@ScriptDir&"QWE") === '&FileExists (@ScriptDir&'QWE')&' !!! (Failure: 0 if path/file does not exist.)'&@CRLF)
ConsoleWrite(';~ ////////////////////////////////////////////////'&@CRLF)
;~ ////////////////////////////////////////////////
$vSize = DirGetSize(@ScriptDir&'QWE')
If @error Then
ConsoleWrite('+If @error Then - ERROR !!! - GOOD !!!'&@CRLF)
Else
ConsoleWrite('If @error Then - NOT error !!!'&@CRLF)
EndIf
$vSize = DirGetSize(@ScriptDir&'QWE')
If $vSize Then
ConsoleWrite('If $vSize Then - TRUE'&@CRLF)
Else
ConsoleWrite('+If $vSize Then - FALSE - GOOD !!!'&@CRLF)
EndIf
If DirGetSize(@ScriptDir&'QWE') Then
ConsoleWrite('If DirGetSize(@ScriptDir&"QWE") Then - TRUE'&@CRLF)
Else
ConsoleWrite('+If DirGetSize(@ScriptDir&"QWE") Then - FALSE - GOOD !!!'&@CRLF)
EndIf
Итог:
;~ ////////////////////////////////////////////////
DirGetSize(@ScriptDir&"QWE") === Success: the sizes that are greater than or equal to zero
FileExists (@ScriptDir&"QWE") === 0 !!! (Failure: 0 if path/file does not exist.)
;~ ////////////////////////////////////////////////
+If @error Then - ERROR !!! - GOOD !!!
If $vSize Then - TRUE
If DirGetSize(@ScriptDir&"QWE") Then - TRUE
Ну что я хочу скачать: исключительный случай, в котором сработал только 1 вариант - параметр в "Failure" возвращает не "0", а "-1". Оператор "IF" его можно сказать "съел", но вот @error здесь выше всех похвал.
И тут я задумался о ГЛАВНОМ: если по сути у всех функций написан разный функционал - кто-то возвращает все три параметра, у кто-то не сработывает @error, а у кого-то наоборот.
Теперь хотелось бы поинтересоваться у Вас - а каким способом Вы проверяете возвращение функций ??? Я не думаю, что каждый раз Вы лезете в справку и смотрите что должно быть в таком случае.