We understand that there are cases where immutability makes our life harder. We barely touched the surface of these problems in a previous section. We will examine issues in more detail in the following chapters.
Let's redevelop our Product
example with a FP style and compare the outcome to its OOP counterpart.
Let's use struct
and make all properties in our Product
example immutable and examine the outcome:
struct FunctionalProduct { let name: String let price: Double let quantity: Int let producer: Producer }
Now we have struct
instead of class
and all properties are immutable. Also, we do not need an init
method as struct
provides it automatically.
We also need to modify our ProductTracker
class:
struct FunctionalProductTracker { let products: [FunctionalProduct] let lastModified: Date func addNewProduct(item: FunctionalProduct) -> (date: Date, products: [FunctionalProduct]) { let newProducts = self.products + [item] ...