>>>>> "Henri" == Henri Yandell <[EMAIL PROTECTED]> writes:
Henri> Been a while since the last one of these, so I expect a few Henri> bits to be missing. Feel free to chime in on things I've Henri> missed: Henri> Next release will be Lang 2.0. Henri> Lang 2.0 scope: Henri> org.apache.commons.lang.functor.* Henri> There is obviously a clash with Collections here, which Henri> Lang seeks to Henri> resolve. Also there is a clash with Rodney's [Functor] Henri> package. From what I understand, despite the similar naming, Henri> [Functor] goes a lot further into the concepts than .functor Henri> does, with .functor being a simpler setup etc. I'm going on Henri> hearsay though, not having looked at the code yet. Dear All, my opinion on lang.functor probably comes too late to have any impact on the course of the release of Lang. But still feel the urge to express my feeling that something goes into the wrong direction with lang.functor. In my opinion lang.functor should not enter 2.0 in the current state: The major issue which I have is the naming of the interfaces. While names like "UnaryFunction" or "BinaryProcedure" may sound a bit esoteric for the unaccustomed ear, these names do however expose the real nature of the interface or their implementations. - "Executor" is the interface for something which is executed not as the name suggests something that executes. If renamed to "UnaryProcedure", I would be able to grasp the nature of this interface and its associated "Utils" class without refering to the javadoc. - While the notion of "Factory" is widely known and the nature of this interface is well exposed by the class name, one may wonder why a creational pattern like "Factory" is found in generic functor package. The name Factory suggests that this interface should only be used in Factory contexts. IMHO, "Function" (in the context its of "Unary" and "Binary" counterparts.) is more general and allows for the same purposes originally intended. The user programmer may then "class WidgetFactory implements Function" or "class WidgetFactory implements UnaryFunction" if the Widget creation should be parameterized with one argument. How would we proceed in the future if the names are not changed and we would like to introduce parameterized Factories? UnaryFactory? - "Predicate" is fine as a name. - "Transformer" does imply an argument. But does it imply as well that there is a result? Furthermore, the name somehow suggests that it is to be used to 'transform' objects, which is in my experience never the case: The argment object is usually left unchanged while a result is calculated as function of the argument object. Wouldn't "UnaryFunction" not be a more indicative name for this interface? I believe that the names where chosen with the intent to gradually remove the counterparts in Collections. However, currently there is no dependence of Collections on Lang.functor, so renaming the interfaces would not do any harm. Of course I aggree that the migration of Collections to lang.functor would be quite smooth. However, in the longterm Collections will have to live with the same naming problems as I have described above. I suggest to do the following renamings in for Lang 2.0: - Executor --> UnaryProcedure - Executor.execute(..) --> UnaryProcedure.run(..) - Factory --> Function - Factory.create() --> Function.apply() - Transformer --> UnaryFunction - Transformer.transform() --> UnaryFunction.apply(..) - rename all the Utils classes accordingly - possibly complement with missing interfaces: - Procedure - UnaryPredicate - possibly add BinaryPredicate, BinaryProcedure, BinaryFunction Then in the future the functor component (currently in Sandbox) may grow up as a place for more advanced functor stuff (also to complement collections) based on the interfaces provided in lang.functor. Of course, these proposals look like major changes right before a release. And performing major changes right before a release is very risky and should be avoided. However, while the changes seem major, they are only "renaming" refactorings which could be implemented quickly without changing any algorithms or functionality. If the lang.functor is not improved now before the Lang2.0 it may never be improved and collections will always rely on questionably named interfaces and probably Collections will never live up to its opportunities. Cheers, Arnd. PS: Please have a look at commons-sandbox-functor. Further, if you have some time at hand to get inspired about functors read http://c2.com/cgi/wiki?BlocksInJava . PPS: Please excuse if I have tripped over some jakarta rules and regulations. I have only been following jakarta commons for a several months and may not be well accustomed to jakarta release interaction protocols. PPP: I would of course volounteer to implement the suggested changes myself, I they were generally aggreed upon. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]