Fwd: lambda expression parameters

Remi Forax forax at univ-mlv.fr
Tue Dec 18 15:09:49 PST 2012

On 12/18/2012 11:51 PM, Brian Goetz wrote:
> Imagine we were designing a language from scratch, knowing what we 
> have learned in the last 17 years about mutability being the root of 
> all evil.  We would do many things to gently encourage people away 
> from avoidable mutability.

sorry, side effects are the root of all evil.

> Of all places to additionally discourage mutability as a way to do 
> things, and where it would likely have the least harm, 

I don't like cargo cult.

> lambda parameters seem an obvious choice.

and as I said, it doesn't worth the pain for people to understand why it 
works with methods and not with lambda.

>   The only reason we'd even consider letting them be mutable is that 
> Java already has methods that have parameters that are mutable by 
> default, and lambdas are like methods.

lambdas are anonymous methods, simple to explain, simple to understand,
but wait, the scoping rules ...


> On 12/18/2012 5:41 PM, Remi Forax wrote:
>> On 12/18/2012 11:33 PM, Brian Goetz wrote:
>>> I like this suggestion that Venkat made on lambda-dev.  However, it
>>> would have to be a little more restrictive than that; basically, that
>>> lambda parameters are *always* final.  The only thing where I can
>>> imagine this being an issue is in refactoring from inner classes, and
>>> even there, if you are modifying method parameters, it is likely that
>>> you need to do additional work to adapt this inner class to a lambda
>>> anyway.
>>> So the suggestion is: lambda formals are always final.
>>> What do people think?
>> Brian,
>> I don't see why parameter should be final. You explain a reason why they
>> should not, but not why they should.
>> Rémi
>>> -------- Original Message --------
>>> Subject: lambda expression parameters
>>> Date: Tue, 18 Dec 2012 14:40:25 -0700
>>> From: Venkat Subramaniam <venkats at agiledeveloper.com>
>>> To: lambda-dev at openjdk.java.net <lambda-dev at openjdk.java.net>
>>> Hi
>>> Is there plans to make the inferred parameter of a lambda expression
>>> final by default.
>>> Right now, we can't specify the parameter is final unless we provide
>>> it with the type.
>>> In the spirit of leaning towards immutability, which is a better
>>> practice, would it be possible to
>>> (a) make all inferred parameters of lambda expressions final, and
>>> (b) to make it non-final, force the developers to explicitly request
>>> (like the mutable in F#).
>>> It's more of a wish-list, if that's something that can be considered.
>>> Thanks,
>>> Venkat

More information about the lambda-spec-experts mailing list