2016-11-21 50 views
2

所以,我是功能編程的新手,我仍然試圖消化基本原理。到目前爲止,我可以理解,理想情況下,代碼應該沒有可變變量,賦值,循環和其他命令性控制結構。所以我有一個問題。功能編程原理

def enrich(xRDD: RDD[xObject], yRDD: RDD[yObject], zRDD: RDD[zObject]): RDD[Result] = { 

    val temp = functionA(xRDD, yRDD) 
    functionB(temp, zRDD) 
} 

def enrich(xRDD: RDD[xObject], yRDD: RDD[yObject], zRDD: RDD[zObject]): RDD[Result] = { 
    functionB(functionA(xRDD, yRDD), zRDD) 
} 

哪一個我應該選擇和原因:下面的兩個代碼snipets之間?我的猜測是第二個,因爲它避免了將數據本地分配給臨時val。這一切都有它嗎?我是否正確?我錯過了什麼嗎?

+0

無論如何,結果將在內存中,這只是一個可讀性問題。如果你認爲'val temp'的好名字,那麼第一個選項就更好了。 – ipoteka

回答

4

兩種方式都很好,但取決於用例中的哪一種。

這兩種方式都沒有錯。您可以使用上述任何一種方法。但是因爲你沒有使用functionA返回的值,除了在函數B中。第二種方式看起來不錯(沒有額外的變量)。額外的變量是不太關心(內存消耗的參考是微不足道的實際用途。)

誤解

分配是在函數式編程確定。重新分配不正確。 在函數式編程中使用變量捕獲結果是OK的。但使用var並重新分配var不是函數式編程。