我正在閱讀這篇關於如何在Ruby in Functional Style中編程的文章。 https://code.google.com/p/tokland/wiki/RubyFunctionalProgrammingRuby中的命令式編程與函數式編程
其中一個是把我關注的例子是:
# No (mutable):
output = []
output << 1
output << 2 if i_have_to_add_two
output << 3
# Yes (immutable):
output = [1, (2 if i_have_to_add_two), 3].compact
儘管「可變」選項不太安全,因爲我們改變了數組的值時,inmutable一個似乎是因爲效率較低它調用.compact
。這意味着它必須迭代數組返回一個沒有nil值的新數組。
在這種情況下,哪個選項是可取的?一般來說,如何選擇不變性(功能性)和性能(在緊急解決方案更快的情況下)?
一般來說,@Chuck說的是有道理的。從另一個角度來看,考慮移動開發內存緊張和更好的性能意味着更好的電池壽命等;例如在iOS開發中,如果您不需要修改數組,並且可以在需要時使用其子類「NSMutableArray」,則可以使用不可變的NSArray。 – Abdo
@Ado在我看來,這個想法在移動開發中依然存在。重點在於,大部分代碼只能輕易地影響程序的CPU使用。考慮80/20經驗法則;如果80%的運行時間花費在20%的代碼中,那麼甚至優化其他80%的代碼,以至於將運行時間減少到零,只會使CPU /電池減少20%消耗你的應用程序。編寫/維護清潔代碼所節省的時間意味着*即使性能是您的目標*,您最好只花時間優化它在哪些方面發揮作用。 – Ben
@Chuck:我同意你的好答案。謝謝! –