Re: Passing a method(reference) to an other method and calling the method.
- From: "Peter Duniho" <NpOeStPeAdM@xxxxxxxxxxxxxxxx>
- Date: Sat, 29 Mar 2008 00:26:01 -0700
On Fri, 28 Mar 2008 20:58:10 -0700, Lew <lew@xxxxxxxxxxxxx> wrote:
Joshua Cranmer wrote:Jan Thomä wrote:apply( new Callback() {Not nice? It illustrates what happens quite clearly, IMO, and makes life easier for documentation purposes.
void callback(Object ... args) {
thisMethod(args[0], args[1]... );
}
});
Not very nice, but i hear closures are to come in one of the next Java
versions....
Hear, hear! There is a tension between what programmers like to do during development, which pushes toward economy of expression, and operational concerns, where good logging and readable code are paramount. Anonymous classes favor the maintainer, but a few developers tend to whine about them.
And then...
[...]
I do not dislike the delegate idiom - perhaps because I don't use C#. I do like the anonymous class idiom, and various other places where Java uses subtypes to do what closures or delegates would.
It seems to me that you're mixing two different things up (as is Joshua), if I read the message correctly.
I agree that it's nice to have the code that's being "passed" (whether as a class implementing an interface or a delegate) present where it's used. However, delegates in C# aren't mutually exclusive of that idea.
An interface implementation versus a delegate discusses _how_ the method reference is passed. This is where Java forces the interface implementation idiom on you, because it doesn't have a function pointer type like delegates.
An anonymous implementation, whether passed as an interface implementation or a delegate, discusses _what_ is passed and _where_ it's declared. This is the idiom you appear to be saying you favor, but it's not missing from C#.
C# has anonymous methods and, with C# 3.0, lamba expressions. Two very convenient and self-documenting ways to create a delegate instance where you need it (just like an anonymous class in Java), providing the all the "illustration" and "documentation" advantages of an anonymous class, without the disadvantage of having to actually have a whole new class (such as some might consider that a disadvantage...I know I do, when the class exists solely to contain a method to be called).
There are occasionally places where I think it'd actually be kind of nice to be able to have an anonymous class in C#. It's not that there's something wrong with that idea per se. But some times all you really need is just one method, and for those situations, delegates work well (and IMHO, in those situations they work better than classes, anonymous or otherwise).
[...]
If and when Java sports closures I will try them out. Perhaps they will woo me over to the Dark Side.
If and when Java does that, I think it will have the best of both worlds.
Pete
.
- References:
- Passing a method(reference) to an other method and calling the method.
- From: Erik
- Re: Passing a method(reference) to an other method and calling the method.
- From: Jan Thomä
- Re: Passing a method(reference) to an other method and calling the method.
- From: Joshua Cranmer
- Re: Passing a method(reference) to an other method and calling the method.
- From: Lew
- Passing a method(reference) to an other method and calling the method.
- Prev by Date: Re: Generation of multiple portTypes in a single WSDL
- Next by Date: ( WWW.SNEAKERS-IN-CHINA.COM) Wholesale New Air Jordan 12 Fusion,Air Jordan 12 X Air Force 1.
- Previous by thread: Re: Passing a method(reference) to an other method and calling the method.
- Next by thread: Re: Passing a method(reference) to an other method and calling the method.
- Index(es):
Relevant Pages
|
|