2013-10-19 93 views
1

這個問題可能不屬於這裏,但我需要一些關於什麼被認爲是「最佳實踐」的建議。我有幾個功能,所有這些都取決於相同的輸入可以說a,bc。爲這些創建錯誤陷阱函數是不錯的做法嗎?還是應該將其編碼到每個功能中?正確的錯誤陷阱R

例如:

firstFunction <- function(a, b, c) { 
    # check a; check b; check c; 
    # do something 
} 

secondFunction < function(a, b, c, from_first) { 
    # check a; check b; check c; 
    # do something 
} 

可能如下:

checkthem <- function(a, b, c) { 
    # check 
    # stop 
} 

secondFunction(a, b, c, from_first) { 
    checkthem(a,b,c) 
    # do something 
} 

是軟件開發這一好的做法,或者我應該避免這種情況?

+0

是的,很好的做法。除了其他好處之外,它還會使您的代碼易於維護,因爲如果需要,您只需在一個位置修改它。因此,編寫一個函數來檢查'a','b'和'c',並在第一個和第二個函數執行任何操作之前調用該函數。 – flodel

回答

2

您還可以創建一個新的入口函數,在該入口函數中執行檢查並調用第一個或第二個函數。由於這兩個函數有許多論點,它們應該有行爲相似性,所以將它們歸入同一個主函數是合乎邏輯的。還要注意,使用這種解決方案,您可以在代碼中調用一次檢查,以便更容易維護。

firstFunction <- function(a, b, c) { 
    # do something 
} 

secondFunction <- function(a, b, c, from_first) { 
    # do something 
} 

mainFunction(a,b,c,type="first",...){ 
    do.check(a,b,c) ## you should define this function 
    switch(type, 
     first = firstFunction(a,b,c), 
     second = secondFunction(a,b,c,...)) 
} 

或如評論所說:

run_with_check <- function(fun, a, b, c, ...){ 
     do.check(a, b, c) 
     do.call(fun,list(a, b, c, ...)) 
} 
+2

而不是'type',你可以傳遞一個函數作爲參數。 – flodel

+0

謝謝,這很有幫助。我想確保我寫的包是最佳實踐。我不是程序員,所以我的目標是建立一個「堅實的基礎」,開發人員可以從中開發更好的擴展。 –