在一段PB源碼中,有看到一個檢查日期的窗口函數如下:
public function integer wf_chk_due_day (string as_due_day);
//
檢察傳入的票期是否合法
返回
0
表示檢察通過
,
返回
1
表示票期的後兩碼不合法
//
票期供
4
碼
,
前兩碼為月份數
,
後兩碼為某一天
(
必須為
1-31
之前的某個數字
)
INT
li_day
SELECT
T
O_NUMBER(SUBSTR(LPAD(TRIM(:as_due_day),4,'0'),3))
INTO
:li_day
FROM
dual;
IF
li_day > 31 OR
li_day < 1
THEN
Return
1
END IF
Return
0
end function
對於此函數定義及功能內容 , 我作如下意見說明 :
1. 此函數只是判斷一個數據是否合法 , 不必要使用 SQL 語法 ( 你們只喜歡 Oralce? 不喜歡 PB?).
2. 雖然目前的代碼已經比較簡單了 , 但我們還是可以精益求精 .
3. 為了增強程式的可讀性 , 不建議使用多重函數嵌套 ( 紅色部分 ).
4. 如果返回值只有兩類 , 建立使用布爾值類型 ( 為什麼呢 ? 請看我調整后的語法 .)
5. 我簡單修改后的另一個思維方法 , 請大家參考 .( 這個還沒有經過壓力測試 , 如有錯誤 , 請扔雞蛋 , 不要拍磚 .)
public function Boolean wf_chk_due_day (string as_due_day);
// 返回值為 True, 則表示檢查通過 .
// 返回值為 False, 則表示后兩碼不合法 .
INT li_day
as_due_day = right(rtrim(as_due_day),2) // 在 PB 中參數變量是可以繼續賦值的 .
li_day = integer(as_due_day)
Return
max(li_day,1)=min(li_day,31)
end
function
6. 原來的語法其實就是取這個字串的后兩碼 , 所以我改為了使用 pb 的 right 函數 .
7. 修改后的精華就是在 return 語法 , 這也是為什麼要將函數的返回值改為布爾值的原因 .
3376

被折叠的 条评论
为什么被折叠?



