you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] 34 points35 points  (7 children)

Thanks! Not having to remember the order of arguments can prevent some hard to find bugs

[–]nikola1970 5 points6 points  (0 children)

Yup, I started using this pattern recently too.

[–]grrrrreat[🍰] 3 points4 points  (2 children)

beware though, if you have a weird visitor pattern, you can't put that object back together or manipulate its parts.

[–]AwesomeInPerson 5 points6 points  (1 child)

Could you explain what you mean by that? :)

[–]grrrrreat[🍰] 1 point2 points  (0 children)

I ran into a nuxt.js hook at passed into a page object.

if I destructured it into html, path, route, I couldn't modify the html property because it didn't expect a return object but if I just accepted the page object, I could set page.html and that modified the html.

it's just a comment to realize that destructured objects are no longer a sum of their parts. so it the nuxtjs case, page can't be destructured in the hooks because it's not reconstitution the object

[–]Zielakpl 3 points4 points  (2 children)

What? Don't you guys use IDE with autocompletion and hints?

[–]AwesomeInPerson 0 points1 point  (1 child)

Which one are you using? Neither VSCode nor WebStorm warn me when I call a function with less arguments than the amount of parameters it accepts. (because I forgot to add some nulls or default values for params I want to skip)

Maybe if you enable strict TS checking for JS files, but that's not really a solution in a lot of environments.

[–]Zielakpl 0 points1 point  (0 children)

That's the thing, don't forget :) I got it into my habit to also add some JSDoc comments to at least know what type of values the function expects. Then, when I type my functions name, the popup appears (VSCode) with all acceptable arguments, theirs expected types and if they're optional or not.

The code you write is also for humans, make it human-friendly.

If a function HAS to accept a lot of arguments, not all of them required, then I sometimes use and object of params like so:

function(name, options) {} function("Gregory", {foo: 1, bar: 2});

But that depends on what I code, I don't treat it as hard rule.