DEV Community

Discussion on: Mutation is ok

Collapse
 
macsikora profile image
Pragmatic Maciej • Edited

I would just answer - it depends. We state our opinions, in contrary to you I see also problem in extending dictionary for such simple cases, in my experience creating so many one liner function can end in ton of functions which nobody will use because they just prefer to write them inline. The example which shows that is famous id function, I personally prefer to just use x => x than import id from magic utils, it is just too simple.

As having functions and composing them is a good thing, we need to take into consideration that more one liners mean also more jumping over the code. I was writing Elm for a while and I found myself in preferring using inline if expressions, or inline case of instead of constantly creating new function. As I loose eye contact with what is really going on, and having many functions force me to jump through them. And no, readable name not always is enough to say that we never want to see what is going on.

Also when I see this:

const filterList = fn => arr => arr.filter(fn)
Enter fullscreen mode Exit fullscreen mode

It is 🚩 for me, as this is nothing more like duplicating the already existing tools, such function in my opinion has no value, and even worst introduce smth which is additional in the codebase. So for me your first implementation:

const isOddNumber = n => n % 2
const filterOddNumbers = numbers => numbers.filter(isOddNumber)
Enter fullscreen mode Exit fullscreen mode

is better, and probably I would even wrote that in that way, but this example is simplified and doesn't shows the whole picture.

I don't force anybody to use mutation, I am just saying that it is fine to mutate locally, it is fine to use "for" loops, nothing wrong with that. Of course if we just reimplement map or filter then we should think twice. But if function makes more than that, transformation for example needs reduce then reaching for loops is fully ok. I don't feel pain looking at statements, also "boilerplate" can happen with expressions, Elm is famous for having a lot of boilerplate, even though it has no statements at all.

And yes I prefer expressions over statements, but I in the same way I hate ternary expression and prefer if statement, as it is just more readable. Python has <expr1> if <conditional_expr> else <expr2> and this is awesome. But in JS, nah, ternary is really not nice.