Cardano documentation says the following:
Plutus Core is the scripting language used by Cardano to implement the EUTXO model. It is a simple, functional language similar to Haskell, and a large subset of Haskell can be used to write Plutus Core scripts.
So, if Plutus Core is a Haskell-based language it is a lazy language too – hence, script's values are only computed when they are needed. But bang operator
! is an important part of Plutus Core as well.
In your example bang patterns are used to force Plutus Core to be more strict in its evaluation (we must force evaluation of those values before evaluating them). All banged properties are eagerly needed for committing a current operation, thus, that's why we use