Re: refactoring
Roedy Green wrote:
I often run into this situation and wonder if there are clever ways of
handling it I have not thought of.
I have a hunk of messy code I would like to break off from a method
and make into its own small method. I use Intellij refactoring
"Extract Method" but it tells me I can't do that because the code
fragment has multiple outputs, e.g. computing two or three static
final local booleans.
I have always felt that a if a method can have multiple inputs it
should be able to have multiple outputs, but very few language
designers (Forth and PostScript being exceptions) have agreed.
Matlab is another exception.
It seems such a production to wrap three booleans as if for transport
to Africa in their own class, in an array, (not to mention the
unpacking code) when at the machine level what I am doing is trivial
in assembler..
I try not to think in assembler when coding in Java, or think in Java
when coding in Matlab... Most languages have some things that can be
said simply and directly, and other things that take longer.
For the specific case of three booleans, I would question whether there
should be an enumeration naming the conditions, with the method
returning an EnumSet.
However, I'm sure you don't just mean the specific case of booleans.
If the code only runs in one thread, it can sometimes be helpful to
first convert the local variables to fields. That allows the method
extraction. Sometimes, further refactoring comes to light after the
extraction that gets rid of the fields again.
Patricia