PowerBuilder NULL和Empty变量

时间:2012-03-06 08:47:16

标签: null powerbuilder

我正在使用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条件错了吗?

3 个答案:

答案 0 :(得分:1)

注意用于测试if条件和空行为的PB方式:

  • 与C语言不同,PB不进行惰性评估,即它总是评估条件的所有部分,并且不会在第一个错误或真实部分停止
  • null具有传染性,在某种意义上说,如果语句的一部分返回null,则整个语句变为空
  • 使用if
  • 时,null语句始终为false

因此,在您的情况下,很可能当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

我总是将空字符串设置为空格,然后检查字符串是否为空...它还取决于您正在运行的场景