- Сообщения
- 5,379
- Репутация
- 2,724
Я использую ContinueLoop (ExitLoop) в следующий случаях (очень удобно):
"ElseIf" вообще не использую, т.к. его можно заменить на
Но, в отличии от последней конструкции, "ElseIf" сильно портит вид самого кода, IMHO лесенка намного читабельнее. В пользу "ContinueLoop" могу сказать, что он в 2 раза быстрее "ElseIf" и в 4 "Else If":
С другой стороны, в машинном коде все равно нет особой разницы между всеми этими конструкциями, т.к. все происходит с помощью тех же операторов перехода J...
Код:
#Include <WinAPIEx.au3>
Global $tData = DllStructCreate('wchar[260]')
Do
$hKey = _WinAPI_RegOpenKey($HKEY_LOCAL_MACHINE, 'SOFTWARE\AutoIt v3\AutoIt', $KEY_QUERY_VALUE)
If @error Then
ExitLoop
EndIf
_WinAPI_RegQueryValue($hKey, 'InstallDir', $tData)
If @error Then
ExitLoop
EndIf
; Что-нибудь еще...
Until 1
If @error Then
$Msg = 'Error: ' & _WinAPI_GetLastErrorMessage()
Else
$Msg = DllStructGetData($tData, 1)
EndIf
_WinAPI_RegCloseKey($hKey)
ConsoleWrite($Msg & @CR)
"ElseIf" вообще не использую, т.к. его можно заменить на
Код:
If ... Then
Else
If ... Then
EndIf
EndIf
Но, в отличии от последней конструкции, "ElseIf" сильно портит вид самого кода, IMHO лесенка намного читабельнее. В пользу "ContinueLoop" могу сказать, что он в 2 раза быстрее "ElseIf" и в 4 "Else If":
Код:
$Count = 0
$Timer = TimerInit()
For $i = 1 To 100000
$Error = 6
If $Error = 1 Then
ElseIf $Error = 2 Then
ElseIf $Error = 3 Then
ElseIf $Error = 4 Then
ElseIf $Error = 5 Then
Else
$Count += 1
EndIf
Next
ConsoleWrite(TimerDiff($Timer) & @CR)
$Count = 0
$Timer = TimerInit()
For $i = 1 To 100000
$Error = 6
If $Error = 1 Then
Else
If $Error = 2 Then
Else
If $Error = 3 Then
Else
If $Error = 4 Then
Else
If $Error = 5 Then
Else
$Count += 1
EndIf
EndIf
EndIf
EndIf
EndIf
Next
ConsoleWrite(TimerDiff($Timer) & @CR)
$Count = 0
$Timer = TimerInit()
For $i = 1 To 100000
$Error = 6
Switch $Error
Case 1, 2, 3, 4, 5
ContinueLoop
EndSwitch
$Count += 1
Next
ConsoleWrite(TimerDiff($Timer) & @CR)
С другой стороны, в машинном коде все равно нет особой разницы между всеми этими конструкциями, т.к. все происходит с помощью тех же операторов перехода J...