2014-12-08 3 views
3

У меня возник короткий вопрос. Есть ли разница в VBA междуЕсть ли разница между вложенными «if» и «если x и y и z и ...» относительно скорости?

if x1 and x2 and x3 and ... and x10 then 
    foo 
end if 

и

if x1 then 
    if x2 then 
    if x3 then 
     ... 
     foo 
    end if 
    end if 
end if 

относительно скорости?

В частности: У меня есть 10 столбцов с данными и вам нужно сравнить данные по строке для дубликатов в базе данных (например, SELECT DISTINCT не будет работать в этом случае).

я мог себе представить, что с помощью

x1 = recordset.fields("Field1").value 
if x1 then 
    x2 = recordset.fields("Field2").value 
    if x2 then 
    x3 = recordset.fields("Field3").value 
    if x3 then 
     ... 
     foo 
    end if 
    end if 
end if 

будет быстрее, чем

x1 = recordset.fields("Field1").value 
x2 = recordset.fields("Field2").value 
... 
if x1 and x2 and x3 and ... and x10 then 
    foo 
end if 

, так как я не должен прочитать все данные из записей. Или будет ли количество ifs убить это преимущество относительно скорости?

ответ

9

В одном вкладыше проверяются все условия, если не выполнено какое-либо из них.

Sub Main() 
    If Check And Check And Check Then 
    End If 
End Sub 

Function Check() As Boolean 
    Debug.Print "checked" 
    Check = False 
End Function 

Вложенные МФС лучший вариант, потому что, как только один условие не выполнение кода будет переходить к любой: еще/конец, если блок сразу, а не пытаться оценить все другие условия.

Это форма short-circuiting in programming.

+1

Большое спасибо :) – frrrt

3

Вложенный Если бы был лучший вариант с точки зрения оптимизации. Поскольку Nested If игнорирует все остальные, если условие не выполняется, однако одна строка. Если использование AND (or) OR не будет оптимизировано, поскольку каждое отдельное условие выполняется до достижения вердикта. Также читаемость кода и ремонтопригодность намного лучше в Nested If (при условии, что они имеют отступы должным образом).

So Nested If over При использовании нескольких условий в любой день для меня!

+1

Большое спасибо :) – frrrt