Во-первых, я не знаю ни одной data
функции. Скорее всего, вы имеете в виду метод DataTable.Value
.
DataTable.Value
всегда должен возвращать пустую строку для пустых ячеек.
Что касается вопроса о производительности - нет, я бы не ожидал здесь узкого места. И даже если... оптимизация для решения проблемы с производительностью, с которой вы еще не сталкиваетесь, называется преждевременной оптимизацией. Не делай этого. Современные процессоры слишком быстры, чтобы вы могли почувствовать разницу между IsEmpty
, IsNull
или проверкой на равенство пустой строки. Обычно существуют другие операции, которые потребляют гораздо больше времени выполнения, и их лучше оптимизировать.
Значение Null
и функция IsNull
редко используются в VBScript или, если уж на то пошло, в QTP/UFT.
Вы можете думать, что Empty
и IsEmpty
существуют для переменных, которые никогда не получали значения (или явно получали Empty
).
В отличие от этого, Nothing
полезен для инициализации переменной значением, подобным Empty
, если эта переменная должна позже содержать ссылку на объект, потому что Is Nothing
возвращает допустимое значение для такой переменной в обоих случаях (случай 1: неинициализировано, т.е. инициализировано до Nothing
и случай 2: назначен допустимому экземпляру объекта), в то время как Is Nothing
завершится ошибкой, если переменная содержит Empty
(RTE: «требуется объект»). Точно так же, оставляя унифицированные переменные ссылки на объект инициализированными в Empty
(подумайте об этом, потому что это то, что происходит!) и позже присваивая эту переменную другой переменной, используя Set
(как вы должны, потому что он, возможно, содержит ссылку на объект в непустом case) потерпит неудачу, если содержащееся значение равно Empty
(вам нужно будет использовать обычное присваивание с =
и без Set
), в то время как оно завершится успешно (т. е. не RTE), если оно содержит Nothing
(или ссылку на объект).
И да, при всем этом довольно нелогично, что DataTable.Value
возвращает пустую строку для пустой ячейки, а не значение Empty
.
Добавляя потенциальную путаницу, Empty = ""
всегда возвращает true
, что может быть не так, как можно было бы ожидать, потому что эй! пустое строковое значение по определению является строковым значением, как и непустая строка, так почему же оно должно считаться равным Empty
? Но это так, потому что для сравнения Empty
преобразуется в строку, а CStr (Empty)
— это пустая строка, которая, конечно же, является "".
person
TheBlastOne
schedule
18.12.2014