83
Good Refactoring vs Bad Refactoring
(www.builder.io)
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.
Hope you enjoy the instance!
Rules
Follow the wormhole through a path of communities !webdev@programming.dev
that we agree on: properties should be cheap to compute.
Making a simple ternary condition as a function instead of property is a wasted opportunity to make its usage cleaner.
Make its usage cleaner? I don't see how a property does that at all. We are talking about
x.foo
vsx.foo()
really. And IMO the latter tells you this is a function that needs to do some work even if that work is very cheap.x.foo
implies that you might be able to set the value as well. But with computed properties maybe not. Which IMO makes the program a bit harder to read and understand as you cannot simply assume it is a simple assignment or field access. It could be a full function call that does different things depending on other values or even if you are setting vs getting the value. I prefer things being more explicit.Because you're assuming
foo
won't be renamed when it becomes a function. A function should start with a verb, sayget_foo()
, because justfoo()
tells me nothing about what the function does (or what to expect as output). If you make it a property,get_
is implicit.So if the age is computed from the year of birth for example, it's really e.g.
thing.age
orthing.get_age()
- both of which are fine, but I'd pick the property version.Or just
thing.age()
which is fine and is fairly obvious it will return the age of the thing. And that is what is done in most languages that dont have computed properties.get_
on a method really adds no value nor clarity to things. The only reasonfoo()
is ambiguous is because it is a bad name - really just a place holder. Missing out the brackets here adds no value either, just makes it hard to tell that you are calling a function instead of just accessing a property.