An example

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]
return (date: Date(), products: newProducts)
}
}

Our FunctionalProductTracker is simplified: it is struct with an immutable array of products and our addNewProduct does not modify the state of our object but provides a new array of products each time. In fact, we can remove the addNewProduct method from this struct and handle it in a client object.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset