Summary
The honest signature is important not only in functional approach but also every time we code, since, basically, the signature has to deliver all the information about the possible accepted input values and possible produced output. By implementing honest signature, we will be aware of the value we pass into the method parameter. We have to ensure that we have an immutable class as well in order to get functional because mutable operations will make our code dishonest.
Although we have to avoid side-effects in our pure function, it's nearly impossible to really avoid side-effects in our code. What we can do then is deal with it. We can use the command-query separation (CQS) principle to separate methods that generate side-effects and methods that don't. If the method returns a value, it will be a query and doesn't mutate anything. If the method returns nothing, it must be a command and will leave some side-effects in the system.
We can also separate our code into...