-, : . : .
"" , final: .
, ? , deposit BankAccount, , . , , ! , .
: deposit BankAccount, BankAccount: amount , Unit. BankAccount Unit Any, Any. , . Option[BankAccount], a Try[BankAccount] Either[SomeErrorType, BankAccount], . . ( withdraw.)
- :
final case class BankAccount(balance: Int) {
private def deposit(amount: Int) = copy(balance = balance + amount)
private def withdraw(amount: Int) = copy(balance = balance - amount)
}
. copy case, . , , .
, . ... ? , , , ! , ... ... ! 100 , 90 , 10 . 100 ! , , 110 90 ; 200 !
, .
-, , , " , , ", " , ", ( ) .
- , - . : - , - . , , , , . , :
final case class TransactionSlip(source: BankAccount, destination: BankAccount, amount: BigDecimal)
final case class BankAccount {
def balance =
TransactionLog.filter(slip.destination == this).map(_.amount).reduce(_ + _) -
TransactionLog.filter(slip.source == this).map(_.amount).reduce(_ + _)
}
, , , , , . , , . , , , , . , ( ).
, , , . , - , , , , .