I my last video about pure functions I said that to be pure a function should be self-contained i.e it should only access values from it's own scop...
For further actions, you may consider blocking this person and/or reporting abuse
In the first snippet i would say that
thisWontBePure
is pure. As far as i know pureFunction is a constant. What could possibly change the value returned bypureFunction
at runtime?Consider this:
I would say that
inner
is still a pure function because the value ofa
can't change once is locked in the closure.If a function doesn't have side effects and mantains referential transparency, to me that is a pure function.
mmm you got me thinking. What if :
Fair question. This is javascript, right? In a dynamic language you can only write code in a functional style and hope that no one does a trick like the one you did there.
In your example
inner
becomes impure becausevalueOf
is impure (it changes some state outside of its scope). So if an impure function gets executed inside of a "pure" function than it is no longer pure.obj1.valueOf
is not referential transparent!I messed up the code format. Used from stack overflow... Sorry for asking this here, how can I format code in a comment?
The syntax highlight can be activated with a block closed in triple backticks, and optionaly a language name. Like this:
```javascript
console.log('hello');
// some code
```
Thank you sir. Sorry for the irrelevant question again.
not all side effects are the same, only observed side effects are relevant for the definition of pure function.
As you know a pure function has the following two requirements:
That does not imply that you cannot call other functions but if the called functions change behaviour you are breaking rule #2.
Functional programming languages have immutable values (at least by default) so you cannot "override" functions or change variables. By definition an immutable variable is not really a variable but just a value.
If you are trying to do functional programming in JavaScript or C# which have references, well, then you have to enforce those rules by coding style and self-discipline. The runtime will not help you.
Well If the functions called are pure as well, then yes, I think it doesnt defeat the purpose.
But what if that function in global scope will be overridden by non-pure function?
Global scope can be altered from other parts of the code.
Yes then this function became not pure. So just like a var can change from a number to function, I believe a function can be rendered pure or not while it changes.
Then it looks like it's not the function that can be pure or not, but a function call.
So we can have pure function calls and impure function calls.
I have to agree
Would be awesome to summon some FP pro here to clarify the terminology.