それぞれの条件に基づいて、メンバーを含めるか含めないかのリストを作成する必要があります。
発注書を検証する必要があり、価格に応じて多くの人に通知する必要があるとしましょう。価格が 10 を超える場合は、スーパーバイザーに通知する必要があります。価格が 100 を超える場合は、スーパーバイザーとマネージャーの両方です。1000円以上ならスーパーバイザー、マネージャー、ディレクター。
私の関数は、入力として価格を取り、通知する人のリストを出力する必要があります。私は次のことを思いつきました:
def whoToNotify(price:Int) = {
addIf(price>1000, "director",
addIf(price>100, "manager",
addIf(price>10, "supervisor", Nil)
)
)
}
def addIf[A](condition:Boolean, elem:A, list:List[A]) = {
if(condition) elem :: list else list
}
プレーンな Scala でこれを行うより良い方法はありますか? addIf
ここで、関数を使用していくつかの車輪を再発明していますか?
価格のチェックは単純化されていることに注意してください。実際には、チェックは多くのデータベース フィールドでより複雑になり、組織階層に誰かを含めることは、その下のすべての人を含めることを意味しないため、リストを切り詰めるソリューションは機能しません。
編集
基本的に、不変リストを使用して、次のことを達成したいと考えています。
def whoToNotify(po:PurchaseOrder) = {
val people = scala.collection.mutable.Buffer[String]()
if(directorCondition(po)) people += "director"
if(managerCondition(po)) people += "manager"
if(supervisorCondition(po)) people += "supervisor"
people.toList
}