1

[Int, MyClass] の Map を引数として取るメソッドがあります。このようなもの:

myMethod(someMap : Map[Int, MyClass])

ただし、someMap が常に存在するとは限りません (Java の世界では null であり、Scala では None です)。API の観点から、このメソッドのより適切な設計は次のうちどれですか。

  1. Option でラップする: myMethod(someMap : Option[Map[Int, MyClass]] = None)

  2. デフォルトの空のマップの定義: myMethod(someMap : Map[Int, MyClass] = Maps.empty)

最初のオプションはエレガントに見えますが、Map (None ではない場合) を Some() でラップする必要があり、実装者が getOrElse を実行してラップを解除する必要があるという複雑さが追加されています。最初のオプションは、マップ オブジェクトが実際には存在しない可能性があることを API のコンシューマーに明らかにします (なし)。

2 番目のオプションでは、ラップ (一部) またはアンラップを行う必要はありませんが、既存の Map オブジェクトが存在しないたびに空のコンテナーをインスタンス化する必要があります。

また、引数は 1 です。Option 自体が 0 または 1 アイテムのコンテナーであり、Map もコンテナー (コレクション) です。コンテナを別のコンテナで包むのは良いデザインですか?

API 設計の観点から、どちらがより良いアプローチですか?

4

2 に答える 2