3 ms·
In the parent's suggestion, you still have immutable objects. "VerbalExpression()" is a valid regex, namely the empty one. Every subsequently called method conc
by Tainnor 6y ago
In the parent's suggestion, you still have immutable objects. "VerbalExpression()" is a valid regex, namely the empty one. Every subsequently called method concatenates some new regex onto the receiver and thus builds a new regex (since regular expressions are closed under concatenation).
Builders are used in Java* when you have an object which is invalid without passing in a bunch of parameters, but you don't want to have to remember the order of the parameters. But this is not one of these cases.
There is one drawback, however: you do have to compile the regex into a FSA at some point and it wouldn't be good to do that for every intermediate regex. So I assume that the compilation happens in the "build" step. They could have just called it "compile", though.
* named parameters in constructors seem a better alternative in every language that supports them, e.g. Kotlin
- stickfigure 6y agoFurthermore, with immutable objects there's no need to to have any public constructors at all. `REGEX.startOfLine().then("http")...` Since the start object is immutable, there's no reason to create new ones. Here's an example of this pattern applied to HTTP (my project): https://github.com/stickfigure/hattery https://github.com/stickfigure/hattery Avoiding repeated Pattern.compile() is a good point though.