2016-01-26 137 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)第一。

相关问题