Correct, no function on its own is "functional" programming.
"Functional" is only when a function is useable in a composable manner, meaning it can be composed with other functions to make larger functions.
For example, (and somewhat ironically), the "reduce" in python can be used functionally (it may have to be curried first), but not the "reduce" in JavaScript, because in JavaScript it's not a "free-function", it is bound as a member method of the Object blueprint, Array (essentially a Class). Thus in JavaScript's case, it's reduce "method" is Object Oriented. Also, a function that takes a function as a param doesn't simply make it formally "Functional Programming"
Of course you could make it a functional-programming-usable function by wrapping it in a free-function.
Correct, no function on its own is "functional" programming.
"Functional" is only when a function is useable in a composable manner, meaning it can be composed with other functions to make larger functions.
Can you give an example of a function that cannot be composed with other functions to make a larger function?
For example, (and somewhat ironically), the "reduce" in python can be used functionally (it may have to be curried first), but not the "reduce" in JavaScript, because in JavaScript it's not a "free-function", it is bound as a member method of the Object blueprint, Array (essentially a Class). Thus in JavaScript's case, it's reduce "method" is Object Oriented. Also, a function that takes a function as a param doesn't simply make it formally "Functional Programming"
Putting aside the issue of javascript functions being procedures.
reduce isn't bound as a member -- you can use it independent of Array, and you can supply any 'this' you like when you invoke it.
Effectively there is an additional argument, which provides the value of this.
I think perhaps you are trying to understand javascript in C++ terms?
Of course you could make it a functional-programming-usable function by wrapping it in a free-function.
Javascript doesn't have a distinction between member-functions and free-functions.
And even if it did, being associated with a class is not in-and-of-itself relevant to being a function or functional.
For example...
const reduce = (fn, startVal) => a => a.reduce(fn, startVal);
All you're doing here is some syntactic hopscotch -- it's calling array.reduce normally, which should tell you that you haven't changed anything fundamentally.
But it's getting clearer that what you consider to be functional is just one particular kind of procedural composition.
What's significant about functions is that they're time invariant.
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Correct, no function on its own is "functional" programming.
"Functional" is only when a function is useable in a composable manner, meaning it can be composed with other functions to make larger functions.
For example, (and somewhat ironically), the "reduce" in python can be used functionally (it may have to be curried first), but not the "reduce" in JavaScript, because in JavaScript it's not a "free-function", it is bound as a member method of the Object blueprint, Array (essentially a Class). Thus in JavaScript's case, it's reduce "method" is Object Oriented. Also, a function that takes a function as a param doesn't simply make it formally "Functional Programming"
Of course you could make it a functional-programming-usable function by wrapping it in a free-function.
For example...
Can you give an example of a function that cannot be composed with other functions to make a larger function?
Putting aside the issue of javascript functions being procedures.
reduce isn't bound as a member -- you can use it independent of Array, and you can supply any 'this' you like when you invoke it.
Effectively there is an additional argument, which provides the value of this.
I think perhaps you are trying to understand javascript in C++ terms?
Javascript doesn't have a distinction between member-functions and free-functions.
And even if it did, being associated with a class is not in-and-of-itself relevant to being a function or functional.
All you're doing here is some syntactic hopscotch -- it's calling array.reduce normally, which should tell you that you haven't changed anything fundamentally.
But it's getting clearer that what you consider to be functional is just one particular kind of procedural composition.
What's significant about functions is that they're time invariant.