Использование Empty vs для определения или проверки переменной в VBscript

При объявлении переменной пустой (например, перед циклом) это иногда делается как "" или Empty. Также при проверке значения иногда используется с «(Not IsEmpty(variable))» и «variable ‹> Empty». Лучше ли использовать один, а не другой, и может ли это вызвать какие-либо проблемы при неправильном использовании?

Ex1:

  • fileNameDate = Пусто
  • ДатаИмяФайла = ""

Ex2:

  • Если (Не ЯвляетсяПустым(ДатаИмяФайла)) Тогда
  • Если FileNameDate ‹> Пусто Тогда
  • Если FileNameDate ‹> "" Тогда

Спасибо!

------------Обновлять-------------

Обратите внимание, что мой вопрос не о разнице между Null, Empty и Nothing. Я просто концентрируюсь на части «Пусто» и на том, то же ли это, что писать «». По большей части я получил аналогичные результаты при замене двух, но я не знаю, были ли это просто примеры, которые я использовал. Например, меня несколько смутило следующее.

Мой код:

 Dim x, y, z

'Option1 (Do not set x to anything)

'Option2
'x = Empty

'Option3
'x = ""

If x = "" Then
'Action1
End if

If x = Empty Then
'Action2
End if

If IsEmpty(x) Then
'Action3
End if
  • Если я выберу Option1 и просто не определю «x», произойдут все три действия.
  • Если я выберу Option2 и установлю x = Empty, все три действия также произойдут.
  • Но если я выберу Option3 и установлю x = "", произойдет только Action1 и Action2.

Почему?


person Yevgen    schedule 15.11.2016    source источник
comment
Возможный дубликат String не является нулевым, пустым или пустой строкой   -  person user692942    schedule 15.11.2016
comment
Это также вопрос, который вызовет много ответов, основанных на мнениях, что делает его не по теме. Перед публикацией прочтите Как задать вопрос.   -  person user692942    schedule 15.11.2016
comment
Лично я считаю, что использование простого теста длины, такого как Len(fileNameDate & "") > 0, творит чудеса и позволяет избежать проверки на наличие пробелов, нулей и т. д.   -  person user692942    schedule 15.11.2016
comment
@Lankymart Спасибо. Это отличное предложение, которое я сохраню.   -  person Yevgen    schedule 15.11.2016


Ответы (1)


Некоторые соображения:

fileNameDate = Empty  ' The same as just declaring Dim fileNameDate
IsEmpty(fileNameDate) ' = True

Не то же самое, что:

fileNameDate = ""
IsEmpty(fileNameDate) ' = False

Я думаю, что функция IsEmpty() названа неправильно, потому что она проверяет, была ли переменная инициализирована, а не действительно ли она пуста.

person karliwson    schedule 15.11.2016
comment
На самом деле не имеет значения, какой это тип, поскольку VBScript не имеет типов, все является Variant, что означает проверку того, работают ли дата, целое число, длинное число и строка одинаково. Я мог бы написать Len(someVariable & "") > 0, и это все равно сработало бы для любого из них. По сути, вы явно переводите его в строку, поэтому в случае дат и числовых значений вам нужно будет вернуть их обратно. - person user692942; 15.11.2016
comment
karliwson, я думал, что твоя последняя строчка ответила на мой вопрос. Тем не менее, я проверил, установив для переменной значение Empty, а затем проверив с помощью IsEmpty(), и все равно получил True (см. обновление в описании). Разве это не должно быть False, так как я инициализировал свою переменную с помощью Empty, или установка значения Empty означает просто деинициализацию (очистку любого значения и сброс)? - person Yevgen; 15.11.2016
comment
@Yevgen, устанавливая для переменной значение Empty, вы не инициализируете ее, вы делаете наоборот: деинициализируете. Сначала это может сбивать с толку, но подумайте, что вы говорите VBScript, что переменная пуста (не инициализирована), поэтому, естественно, когда вы спросите, она скажет, что она пуста. - person karliwson; 15.11.2016
comment
Хорошо, я думаю, это имеет смысл. Тогда проверка с x = Empty кажется более универсальным вариантом проверки, поскольку она вернет true, если переменная 1) не была инициализирована 2) если она была установлена ​​​​на 0 длина (т.е.) 3) если переменная была установлена ​​​​на Empty. Это отвечает на мои вопросы о том, что я должен использовать. Спасибо @karliwson! - person Yevgen; 15.11.2016
comment
За исключением случая 2. Если для строки установлено значение "", она вернет значение False, поскольку оно было установлено. Если вам не нужно конкретно знать, была ли установлена ​​переменная или она просто пуста (например: x = "", вы можете использовать предложение @Lankymart: Len(x & "") > 0 - person karliwson; 15.11.2016