For $i=1 To UBound($aSoft)-1
If $aSoft[$i][1] == 'True' Then
; Здесь работа функции MoyFunc()
; Операция с файлом : $aSoft[$i][0]
EndIf
Next
For $i = 1 To $iLen
$iAsc = Asc(StringMid($sText, $i, 1))
If $iCheckASCIICode And $iAsc > 128 Then $bLess128 = False
If Not BitAND($iAsc, 0x80) Then
ContinueLoop
ElseIf Not BitXOR(BitAND($iAsc, 0xE0), 0xC0) Then
$iExt = 1
ElseIf Not (BitXOR(BitAND($iAsc, 0xF0), 0xE0)) Then
$iExt = 2
ElseIf Not BitXOR(BitAND($iAsc, 0xF8), 0xF0) Then
$iExt = 3
Else
Return False
EndIf
If $i + $iExt > $iLen Then Return False
For $j = $i + 1 To $i + $iExt
$iAsc = Asc(StringMid($sText, $j, 1))
If BitXOR(BitAND($iAsc, 0xC0), 0x80) Then Return False
Next
$i += $iExt
Next
Если есть большая вложенность проверок и выборок, то городить If...Else будет не слишком удобно. В место одной строки писать 2, 3, 4, 5 ......А смысл? Плюс, при большой вложенности выстраиваются отступы. Зачем же ухудшать читабельность?так, что его не будет
For $i=1 To UBound($aSoft)-1
$iQwe1 = _Qwe1()
If $iQwe == -1 Then ContinueLoop
$iEwq = _Ewq()
If $iEwq == -4 Then ContinueLoop
$iAsd = _Asd()
If $iAsd == 4 Then ContinueLoop
$iDsa = _Dsa()
If $iDsa == 7 Then ContinueLoop
$iAwd = _Awd()
If $iDsa == 45 Then ContinueLoop
$iFgt = _Fgt()
If $iFgt == 14 Then ContinueLoop
$iFds = _Fds()
If $iFgt == 17 Then ContinueLoop
$iVcx = _Vcx()
If $iVcx == 14 Then ContinueLoop
Next
For $i = 1 To $a__MSOE_Events[0][0]
;Compare with standard event, or with wheel *Scroll* Down and wheel *Scroll* Up events
If $a__MSOE_Events[$i][0] = $iEvent Or ($iEvent = $MOUSE_WHEELSCROLL_EVENT And ($a__MSOE_Events[$i][0] = $iEvent+8 Or $a__MSOE_Events[$i][0] = $iEvent+16)) Then
If $iEvent <> $a__MSOE_Events[$i][0] Then
Local $tWheel_Struct = DllStructCreate($stMSLLHOOKSTRUCT, $lParam)
Local $sWheelScroll_Data = DllStructGetData($tWheel_Struct, 3)
If _WinAPI_HiWord($sWheelScroll_Data) > 0 Then
If $iEvent+16 <> $a__MSOE_Events[$i][0] Then
ContinueLoop ;Scroll Up event, but not matching
EndIf
Else
If $iEvent+8 <> $a__MSOE_Events[$i][0] Then
ContinueLoop ;Scroll Down event, but not matching
EndIf
EndIf
EndIf
If $a__MSOE_Events[$i][4] <> 0 And Not __MouseSetOnEvent_IsHoveredWnd($a__MSOE_Events[$i][4]) Then
Return 0 ;Allow default processing
EndIf
$i__MSOE_EventReturn = 0
$iBlockDefProc_Ret = $a__MSOE_Events[$i][5]
$iRet = Call($a__MSOE_Events[$i][1], $a__MSOE_Events[$i][2], $a__MSOE_Events[$i][3])
If @error Then
$iRet = Call($a__MSOE_Events[$i][1], $a__MSOE_Events[$i][2])
EndIf
If @error Then
$iRet = Call($a__MSOE_Events[$i][1])
EndIf
$i__MSOE_EventReturn = 1
If $iBlockDefProc_Ret = -1 Then
Return $iRet
EndIf
Return $iBlockDefProc_Ret ;Block default processing (or not :))
EndIf
Next
Из Encoding.au3:
For $i = 1 To $iLen
$iAsc = Asc(StringMid($sText, $i, 1))
If $iCheckASCIICode And $iAsc > 128 Then $bLess128 = False
If BitAND($iAsc, 0x80) Then
If Not BitXOR(BitAND($iAsc, 0xE0), 0xC0) Then
$iExt = 1
ElseIf Not (BitXOR(BitAND($iAsc, 0xF0), 0xE0)) Then
$iExt = 2
ElseIf Not BitXOR(BitAND($iAsc, 0xF8), 0xF0) Then
$iExt = 3
Else
Return False
EndIf
If $i + $iExt > $iLen Then Return False
For $j = $i + 1 To $i + $iExt
$iAsc = Asc(StringMid($sText, $j, 1))
If BitXOR(BitAND($iAsc, 0xC0), 0x80) Then Return False
Next
$i += $iExt
EndIf
Next
Еще интересней вариант:
For $i = 1 To $a__MSOE_Events[0][0]
If $a__MSOE_Events[$i][0] = $iEvent Or ($iEvent = $MOUSE_WHEELSCROLL_EVENT And ($a__MSOE_Events[$i][0] = $iEvent+8 Or $a__MSOE_Events[$i][0] = $iEvent+16)) Then
If $iEvent <> $a__MSOE_Events[$i][0] Then
Local $tWheel_Struct = DllStructCreate($stMSLLHOOKSTRUCT, $lParam)
Local $sWheelScroll_Data = DllStructGetData($tWheel_Struct, 3)
If Not ((_WinAPI_HiWord($sWheelScroll_Data) > 0 and $iEvent+16 <> $a__MSOE_Events[$i][0]) or (_WinAPI_HiWord($sWheelScroll_Data) <= 0 and iEvent+8 <> $a__MSOE_Events[$i][0])) Then
If $a__MSOE_Events[$i][4] <> 0 And Not __MouseSetOnEvent_IsHoveredWnd($a__MSOE_Events[$i][4]) Then
Return 0 ;Allow default processing
EndIf
$i__MSOE_EventReturn = 0
$iBlockDefProc_Ret = $a__MSOE_Events[$i][5]
$iRet = Call($a__MSOE_Events[$i][1], $a__MSOE_Events[$i][2], $a__MSOE_Events[$i][3])
If @error Then
$iRet = Call($a__MSOE_Events[$i][1], $a__MSOE_Events[$i][2])
EndIf
If @error Then
$iRet = Call($a__MSOE_Events[$i][1])
EndIf
$i__MSOE_EventReturn = 1
If $iBlockDefProc_Ret = -1 Then
Return $iRet
EndIf
Return $iBlockDefProc_Ret ;Block default processing (or not :))
EndIf
EndIf
EndIf
Next
в этом скрипте, я не стал его переделывать, потому чтоЗачем же ухудшать читабельность?
If Not ((_WinAPI_HiWord($sWheelScroll_Data) > 0 and $iEvent+16 <> $a__MSOE_Events[$i][0]) or (_WinAPI_HiWord($sWheelScroll_Data) <= 0 and iEvent+8 <> $a__MSOE_Events[$i][0])) Then
; ...
EndIf
If _WinAPI_HiWord($sWheelScroll_Data) > 0 Then
If $iEvent+16 <> $a__MSOE_Events[$i][0] Then ContinueLoop
Else
If $iEvent+8 <> $a__MSOE_Events[$i][0] Then ContinueLoop
EndIf
; ...
Почему нет, есть факты?в этом скрипте, я не стал его переделывать, потому что
а) он маловероятен
б) если и возник, то свидетельствует о плохой структуре самого кода.
просто в пику
ок. давай присмотримся к скрипту. в цикле выполняется функция номер один. и если ее значение не равно определенной выполняется функция два. и только если ее значение не равна чему-то там, выполняется три, и т.д. если ты считаешь что такая разветвленная структура это нормально, то мне сложно представить целесообразность построения самого алгоритма таким образом. но! если все же алгоритм уже составлен именно таким образом, то именно древовидная структура логически отвечает за ее содержимое, чего не скажешь о варианте с использованием пропусков. как ты сказал дело вкуса и привычки, но отлаживание такого кода мне видится более сложным чем с использованием иерархически согласованного условного дерева.проверяет результат выполнения каждой функции
то мне сложно представить целесообразность построения самого алгоритма таким образом.
как ты сказал дело вкуса и привычки, но отлаживание такого кода мне видится более сложным чем с использованием иерархически согласованного условного дерева.
моя твоя не понимать :DИ все же, но ... так дело вкуса и привычку или же все же но?
это просто замечательно. у меня оно тоже есть.Хорошо, когда есть ИМХО
так и представляю себе во всех вывесках страныНе хорошо - монополизировать.
Позвольте с Вами не согласиться. Сейчас пытаюсь написать графическую оболочку для umodel.exe, который распаковывает пакеты для игр. Все расширения (upk, umap, xxx, ... это пока только те, которые знаю), с которыми он работает, выяснить мне не удалось. Зато я знаю, с которыми он точно не работает. В итоге я использую следующую конструкцию:куча кода, которую надо пропустить - это мусор
зачем в коде участок который не надо выполнять?
;...
$aFiles = _FileListToArray(@ScriptDir, '*', 1)
;...
For $i = 1 To $aFiles[0]
Switch StringRegExpReplace($aFiles[$i], '^.*\.', '')
Case 'txt', 'au3', 'exe', 'rar', 'cmd', 'bat', 'DLL', '7z', 'ico'
ContinueLoop
EndSwitch
;дальше некоторый кусок кода, который запускает umodel.exe, читает консольный вывод и т.д. и т.п.
;...
Next
;...
$aFiles = _FileListToArray(@ScriptDir, '*', 1)
;...
For $i = 1 To $aFiles[0]
If Not StringRegExp($aFiles[$i], '^.*\.(txt|au3|exe|rar|cmd|bat|DLL|7z|ico)')
;дальше некоторый кусок кода, который запускает umodel.exe, читает консольный вывод и т.д. и т.п.
EndIf
;...
Next
#include <File.au3>
$j = 0
$aFiles = _FileListToArray(@SystemDir, '*', 1)
$iStart = TimerInit()
For $i = 1 To $aFiles[0]
If Not StringRegExp($aFiles[$i], '^.*\.(txt|au3|exe|rar|cmd|bat|DLL|7z|ico)') Then
$j += 1
EndIf
Next
$sTime = StringFormat('%.2f', TimerDiff($iStart))
MsgBox(64, $aFiles[0], 'Time: ' & $sTime & @LF & 'Files: ' & $j)
#include <File.au3>
$j = 0
$aFiles = _FileListToArray(@SystemDir, '*', 1)
$iStart = TimerInit()
For $i = 1 To $aFiles[0]
Switch StringRegExpReplace($aFiles[$i], '^.*\.', '')
Case 'txt', 'au3', 'exe', 'rar', 'cmd', 'bat', 'DLL', '7z', 'ico'
ContinueLoop
EndSwitch
$j += 1
Next
$sTime = StringFormat('%.2f', TimerDiff($iStart))
MsgBox(64, $aFiles[0], 'Time: ' & $sTime & @LF & 'Files: ' & $j)
Но ведь и конструкция If...Else...EndIf, и любой другой условный оператор, все равно пропускает определенные участки кода в зависимости от входящего условия. ИМХО, какая разница при помощи чего пропускать....не должно быть участков кода которые пропускаются...
...чтобы каждая строка скрипта что-то делала...
Kaster сказал(а):madmasles
возможно в моем шаблоне где-то ошибка. проверить не могу. но смысл я думаю понятен
я не оспариваю факт, что можно использовать и то и другое. просто у каждого свое виденье "правильного кода". так вот в моем, не должно быть участков кода которые пропускаются. даже если окончательный результат одинаковый я стараюсь писать так, чтобы каждая строка скрипта что-то делала.
$i=1
IF $i = 1 Then
msgbox(0,0,$i)
Else
ContinueLoop
EndIf
ну с этим сложно поспорить но я имел в виду пропуски другого характера. именно пропуск, а не результат выбора. когда часть скрипта в ветке условного оператора, код (для меня) более понятен, т.к. организован иерархически. а ContinueLoop это некий goto, который, по мне, слегка нарушает и порядок, и самое главное хронологию.ИМХО, какая разница при помощи чего пропускать.