4 ms·
It’s a code smell if you are calling a method chain that long at all.
by hamandcheese 8y ago
It’s a code smell if you are calling a method chain that long at all.
- laythea 8y agoCannot agree with you more. I personally hate chained expressions. Awful for debugging too.
- wtetzner 8y agoIt's only awful for debugging because the tools are awful.
- laythea 8y agoThe tools for Java are greate (try C++ if you disagree). It's the code that is the problem here.
- wtetzner 8y agoThe tools for Java are much better than those for C++. However, claiming the code is the problem is silly. I'm not going to introduce a bunch of local variables just to appease a debugger. If splitting on separate lines makes code more readable, then sure, do that. But often it just makes the code longer and harder to follow.
- xxs 8y agoJava debugging tools are beyond excellent for debugging such code (not that it should be written that way)
- laythea 8y agoI still have to select the sub-expression whose value I wish to inspect. This involves precisely aiming the cursor at text, which is a lot of mental burden (x millions). A task I thank the developer who creates a variable to hold such a reference, for it creates a much better experience.
- AaronFriel 8y agoThis is largely not the case outside of the C-like languages that inherited nulls. Long method chains with a strong type system or a functional (also called "fluent") style are extremely expressive and common in languages that obviate the need to handle null values at every member.
- hamandcheese 8y agoRegardless of safety guarantees (or lack thereof), a method chain that long indicates a lot of knowledge of the structure and hierarchy of the dependency. It makes refactoring/testing/mocking more difficult.
- fgonzag 8y agoWhat does the length of the method chain have to with anything? Let's say I define an interface Foo.bar.xyz with method call, and I call the implementation foo.bar.xyzimpl.method() Everything is just as testable and decoupled, it's just a different project structure. Method chains have nothing to do with the things you stated.
- int_19h 8y agoIt's usually a property chain, not a method chain - I don't think get...() is meaningfully a method in most cases, even if implemented as such.