程式開發質量檢查(七)

在一段PB源碼中,有如下一個函數定義:

 

<!-- @page { margin: 2cm } -->

public function integer wf_temp_accp (string ws_work_id);

LONG ll_row
LONG ll_count
STRING ls_mk
STRING ls_bill_no
LONG ll_next = 0


ll_count = dw_single.rowcount()
IF ll_count <=0 THEN RETURN -1


FOR ll_row = 1 TO ll_count
   ls_mk = dw_single.getitemstring(ll_row,'chk_mk')
   IF ls_mk = 'Y' THEN
      ls_bill_no = dw_single.getitemstring(ll_row,'m_tbam_bill_no')
      INSERT INTO x_temp_accp 
          values (:ws_work_id,'TEMP',:ls_bill_no,'0000');
      ll_next ++
   END IF
NEXT


IF ll_next = 0 THEN
   RETURN -1
ELSE
   RETURN 1
END IF
end function

 

<!-- @page { margin: 2cm } -->

1. 函數定義沒有注釋 , 不看代碼的人就不知道其功能是什麼 ?

2. 從程式看 , 返回值只是判斷有沒有寫入資料 , 所以對於此類問題最好定義 Boolean 類型返回值 .

3. 函數的參數名稱不符合我們的規範 .

4. 函數中綁定使用了一個 dw_single 對象 , 這樣此函數與 dw_single 集成在一起 , 不符合面向對象的低耦合原則 .

  正確的應該是將 dw_single 作為參數傳入 .

5. 程式中判斷 ll_count <=0 是一個多餘的作法 , 因為在 FOR 語句中會判斷 ll_count 是否大於 ll_row.

6.FOR 語句中 , 並不是每一行都會執行 INSERT 動作 , 還需要判斷 chk_mk 欄位是否為 Y.

  對於這類情況 , 我們最好是先執行 Filter 函數 , chk_mk 不等於 Y 的內容過濾掉 .

  這樣剩下的就是都需要 INSERT 的了 . 資料較多時 , 這個方法要快哦 .

7. 如果你上面的幾點做到了 . 那最后的返回值也是一條語句搞定 .

你可能感兴趣的:(String,function,filter,Integer,insert)