[英]Scala Method Argument: Option of Collection or Default Value
我有采用[Int,MyClass]的Map作為參數的方法。 像這樣:
myMethod(someMap:Map [Int,MyClass])
但是,someMap可能並不總是存在(在Java世界中為null,在Scala中為None)。 從API的角度來看,以下哪一項是此方法的更好設計:
將其包裝在選項中:myMethod(someMap:Option [Map [Int,MyClass]] = None)
定義默認的空地圖:myMethod(someMap:Map [Int,MyClass] = Maps.empty)
第一個選項看起來很優雅,但是它增加了復雜性,那就是必須將Map(如果不是None)包裝在Some()中,並且在實現者中必須執行getOrElse來對其進行包裝。 第一個選項還向api使用者清楚表明,映射對象可能實際上不存在(無)
在第二個選項中,不必進行包裝(在Some中)或展開,但是,每當不存在任何Map對象時,都必須實例化一個空容器。
同樣,參數又是1:Option本身是0或1項的容器,而Map也是容器(集合)。 將一個容器包裝在另一個容器中是否是好的設計?
從API設計的角度來看,哪種方法更好?
正確的問題是: myMethod
與Option
一起使用是否有意義?
從myMethod
的角度來看 ,也許它僅適用於Map
在這種情況下,如果沒有可用的map,則調用者有責任不調用myMethod
。
另一方面,如果沒有Map
或myMethod
為空,則myMethod
可能會做一些特殊的事情,這就是方法處理這種情況的責任。
因此,沒有正確的答案,但正確的論據是一種,因此尊重方法的責任。 目的是在您的函數和類之間具有高凝聚力和低耦合。
Map.empty
是便宜的操作 ,因為它是不可變的。 因此,使用它實際上沒有任何開銷。 因此,請保持簡單,索要沒有包裝的Map
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.