Сведения о вопросе

Killer

12:39, 4th August, 2020

Теги

Если IIf() и If()

Просмотров: 442   Ответов: 2

Недавно я задал вопрос о IIf vs. If и узнал, что в VB есть еще одна функция, называемая If , которая в основном делает то же самое, что и IIf , но является коротким замыканием.

Работает ли эта функция If лучше, чем функция IIf? Превосходит ли оператор If функции If и IIf ?



  Сведения об ответе

lesha

00:52, 24th August, 2020

Черт возьми, я действительно думал, что ты все это время говорил об операторе. ;-) В любом случае …

Работает ли эта функция If лучше, чем функция IIf?

Определенно. Помните, что это встроено в язык. Только один из двух условных аргументов должен быть оценен, что потенциально экономит дорогостоящую операцию.

Превосходит ли оператор If функции If и IIf?

Я думаю, что вы не можете сравнивать их, потому что они делают разные вещи. Если ваш код семантически выполняет назначение, вы должны подчеркнуть это, а не принятие решения. Здесь вместо оператора используется оператор If . Это особенно верно, если вы можете использовать его при инициализации переменной, потому что в противном случае переменная будет инициализирована по умолчанию, что приведет к более медленному коду:

Dim result = If(a > 0, Math.Sqrt(a), -1.0)

' versus

Dim result As Double ' Redundant default initialization!
If a > 0 Then
    result = Math.Sqrt(a)
Else
    result = -1
End If


  Сведения об ответе

lesha

10:21, 4th August, 2020

Одно очень важное различие между IIf() и If() заключается в том, что с Option Infer On более поздний неявно приведет результаты к тому же типу данных в некоторых случаях, как где IIf вернет Object .

Пример:

    Dim val As Integer = -1
    Dim iifVal As Object, ifVal As Object
    iifVal = IIf(val >= 0, val, Nothing)
    ifVal = If(val >= 0, val, Nothing)

Выход:
iifVal имеет значение Nothing и тип объекта
ifVal имеет значение 0 и тип Integer, b / c он неявно ничего не преобразует в целое число.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться