return-from-lambda viewed as dangerous, good alternatives

Lawrence Kesteloot lk at teamten.com
Thu Jan 7 16:17:05 PST 2010


On Thu, Jan 7, 2010 at 3:46 PM, Peter Levart <peter.levart at gmail.com> wrote:
> I think you're exaggerating. The possibility that someone would mistake lambda expression for a
> method is near zero. Lambda expressions do begin with a special character '#' that stands out.
> Methods are 2nd level constructs (if class declaration is 1st level), lambda expressions are
> expressions - they appear in places where you won't find any methods. You don't mistake nested
> blocks of for/do/while/if for methods, do you?

I think most Java programmers will think of closures as a more terse
version of anonymous inner classes (like CICE). They will consider
these two bits of code equivalent:

    Thread thread = new Thread(new Runnable() {
        public void run() {
            if (shouldDie()) {
                return;
            }
            ...;
        }
    });

and:

    Thread thread = new Thread(#() {
        if (shouldDie()) {
            return;
        }
        ...;
    });

With full transparency you're going to be fighting people's
preconceived notions of how anonymous functions behave in Java. 15
years of UI design has taught me that if you fight a user's mental
model, you lose, and documentation doesn't help.

Lawrence


More information about the lambda-dev mailing list