I have started working with VAVR for part of a project.  So far, I like how they have approached collections (this library has basically rewritten/released a separate Collections API for Java!) and associated mutability; any mutation made to a collection returns a new collection -- it is not possible to modify an existing collection.  The documentation for the library even goes so far as to call void return type a code smell because it implies that a method has side effects.
The push for immutability is a somewhat recent concept in programming, but VAVR is strongly on side of pushing for more immutability.  So far, I tend to like where this is going; if I let you borrow/use an object in real life, I expect you to give me that object back in the same state I left it or to tell me that you've changed it somehow.
VAVR also takes a whole new approach to java streams (again, a whole separate API...) and introduces TupleX and FunctionX to support this approach.  I'm not sure I like the TupleX concept.  I understand that it is nice to have something to encapsulate some objects without having to define a whole new class/type for doing so.  This inherently means less code, and most people like less code.  Still, a part of me recoils because the whole point of OO is to provide encapsulation of related data/concepts.  For me, following the logic of Tuple2, Tuple3, etc... means that I could have just written my whole code base with arrays and/or maps... definition, context, and clarity are provided by custom classes, and we lose these things with the spread of generic Tuples*.
*Tuple2, Tuple3, etc...are classes defined in VAVR.  The concept of a tuple is not what I am discussing here.  Tuple != tuple
Comments
Post a Comment