我正在使用PowerBuilder并遇到if条件问题。我想检查变量是否为空或不为空。
所以首先我有if if条件来测试变量是否为null:
IF IsNull(ls_name) THEN
messagebox("ls_name", "is null") //true
else
messagebox("ls_name", "is not null")
end if
从上面的条件来看,我知道ls_name为null。现在我测试它是否为空:
if ls_name = "" then
messagebox ("ls_name", "is empty")
else
messagebox("ls_name", "is not empty") //true
end if
我知道ls_name不是空的。
现在,当我使用if条件检查ls_name是否为Null或者它是否为空时,我将以下条件设置为:
IF not IsNull(ls_name) or ls_name <> "" THEN
messagebox("test", "condition true")
else
messagebox("test", "condition false") //this becomes true.
end if
它转到条件的其他部分。 if部分应该变成真的吗?我写if条件错了吗?
答案 0 :(得分:1)
注意用于测试if
条件和空行为的PB方式:
if
因此,在您的情况下,很可能当ls_name为null时not IsNull(ls_name)
评估为true,但ls_name <> ""
变为null,因此true or null
变为null并且您总是会去到else
部分。
我会检查2次:
if not IsNull(ls_name) then
if ls_name <> "" then
//not empty
else
//empty
end if
else
//null
end if
如果你需要为非空/非null处理相同的代码,那么你必须使用某种布尔标志。我也开始使用在处理嵌套goto
语句时很方便的if
语句。
(顺便说一句:不,goto
- 小心使用 - 不是邪恶的; o)
答案 1 :(得分:1)
将“null”视为“未知”总是让我了解表达式的评估方式。
因此,当ls_name为null时,
not IsNull(ls_name) or ls_name <> ""
评估为
NOT TRUE OR UNKNOWN
或
FALSE OR UNKNOWN
好吧,要将OR评估为TRUE,至少有一个条件必须为TRUE。这不适用于这种情况。
我通常测试的方式是:
IF NOT (IsNull (ls_name) OR ls_name = "") THEN
当ls_name为null时,解析为
NOT (TRUE OR UNKNOWN)
然后
NOT (TRUE)
和
FALSE
换句话说,变量是“空”。
祝你好运,特里
答案 2 :(得分:0)
我用于我的程序的最佳技术是
如果IsNull(ls_name)THEN ls_name =“”
如果Len(Trim(ls_name))= 0那么
ERR MSG HERE
END IF
我总是将空字符串设置为空格,然后检查字符串是否为空...它还取决于您正在运行的场景