2016-01-26 179 views
0

爲了使代碼更具可讀性,有一些建議是,一個函數應該做簡單的事情,然後將函數組合成一個大的函數。但是,如果小函數可以接受相同的多個參數集合,如果使用多個函數,那麼參數是重複的,在這種情況下如何編寫更易讀的代碼?使用2個函數或只有一個函數,如果兩個函數具有相同的一組參數?

例如在以下2個函數中,fun1和fun2具有相同的一組參數,兩者都只能接受一個參數,或者可以接受2個參數。如果使用一個函數(將fun2的代碼複製到fun1),那麼我不會複製參數集(一個用於參數,另一個用於2個參數)。有更好的方法嗎?

(defn fun1 
    ([x] (fun1 x nil)) 
    ([x y] (do .... 
     (fun2 x y))) 
) 

(defn fun2 
    ([x] (fun2 x nil)) 
    ([x y] (......)) 
) 

回答

0

如果你使用一個函數,你必須檢查參數的值,因爲函數的主體是不同的。我認爲這會讓你的代碼變得不那麼清晰,更難以遵循,如果可能的話,測試也是如此。代碼中的一些重複有時是可以接受的,因此如果我是你,我會保留2個函數。

0
(comp do-something-to fun2) 

...具有所有的形狀fun2。無論你給這個短語一個名字...

(def fun1 (comp do-something-to fun2)) 

...是沒有意義的。


我假設你fun1就像是......

(defn fun1 
    ([x] (fun1 x nil)) 
    ([x y] (do-something-to 
     (fun2 x y))) 
) 

do你會不會影響返回值。

順便說一句,如果你想定義fun1提前fun2你需要(declare fun2)第一。

相關問題