2012-03-06 97 views
0

我正在使用PowerBuilder,並且if條件有問題。我想檢查一個變量是否爲空或它不是空的。PowerBuilder NULL和空變量

所以首先我有以下if條件測試,如果變量爲空或不是:

IF IsNull(ls_name) THEN 
    messagebox("ls_name", "is null") //true 
else 
    messagebox("ls_name", "is not null") 
end if 

從上面的情況,我知道ls_name爲空。現在我測試它是否爲空:

if ls_name = "" then 
    messagebox ("ls_name", "is empty") 
else 
    messagebox("ls_name", "is not empty") //true 
end if 

而且我得到的那個ls_name不是空的。

現在,當我使用if條件,以檢查是否ls_name不爲空,或者它是不是空的,我把下面的if條件:

IF not IsNull(ls_name) or ls_name <> "" THEN 
    messagebox("test", "condition true") 
else 
    messagebox("test", "condition false") //this becomes true. 
end if 

它轉到條件的其他部分。不應該如果部分成爲真實?我在寫if條件錯了嗎?

回答

1

思維的理解表現如何評價一直得到我。

所以,當ls_name爲null,

not IsNull(ls_name) or ls_name <> "" 

評估爲

NOT TRUE OR UNKNOWN 

FALSE OR UNKNOWN 

那麼,對於一個或評估爲TRUE,至少一個條件必須是真實的。這不適用於這種情況。

我通常測試的方法就是:

IF NOT (IsNull (ls_name) OR ls_name = "") THEN 

,當ls_name爲空,解析

​​

然後

NOT (TRUE) 

FALSE 

換句話說,變量是「空的」。

祝你好運,

特里

我用我的節目
0

測試if條件和無效行爲謹防PB方式:

  • 不像C語言,PB不是讓懶惰的評價,即它總是計算該條件的所有部件,並在第一不停止或真或假的部分
  • 空是會傳染的,因爲,如果語句的一部分返回null,則整個語句變成了意義空
  • 使用if
當空語句總是假的

因此,對於您的情況,很有可能當ls_name爲空時not IsNull(ls_name)正在評估爲true,但ls_name <> ""將變爲空,因此true or null將變爲空,並且您始終會轉至else部分。

我會檢查2次:

if not IsNull(ls_name) then 
    if ls_name <> "" then 
     //not empty 
    else 
     //empty 
    end if 
else 
    //null 
end if 

如果您需要處理相同的代碼不爲空/不爲空,那麼你將不得不使用某種形式的布爾標誌。我也開始使用goto語句,它在處理嵌套if語句時非常方便。

(順便說一句:NO,goto - 使用時要小心 - 不作惡; O)「空」爲「未知」的

+0

GOTO場景:從我自己的意見除了(我會盡量避免「60年代的邪惡文物」),更重要的意見是微軟的。 GOTO在.NET中不受支持,所以將它放在PB代碼中意味着在移植到PB.NET之前您將有一個修復方法,因爲Microsoft缺乏支持,因此不支持它。時代,他們是一個'長生不老',就像你的編碼風格一樣。 – Terry 2012-03-06 14:00:24

+0

@Terry:我不會太在意'goto'的使用情況,但我們可以看到,這裏有幾個相當詳細的應用程序,目前在11.5經典版中,可能會升級到12.5經典版,但從未升級到.NET版我們的自定義PBNI擴展。這需要重新編寫一個明顯的努力,並且這種努力可能永遠不會被公司的大腦計劃......我不知道.NET不提供轉到,但我們確實在C或PB中謹慎使用它,主要用於清理目的錯誤處理,它實際上是有幫助的。 Java也缺少它(即使goto操作碼確實存在)... – Seki 2012-03-06 17:21:19

+0

FWIW,GoTo *在C#和Visual Basic中受支持,是否存在有效的用例是一個問題:) – 2012-03-07 00:26:42

0

最好的方法是

如果ISNULL(ls_name)THEN ls_name = 「」

IF LEN(TRIM(ls_name ))= 0 THEN

ERR MSG HERE 

END IF

我總是被設置爲空字符串,空的空間,然後檢查字符串是空的..這也取決於你正在運行